在我的應用程序中,我嘗試儘可能少地查詢所需的全部數據。這通常會導致帶有許多聯接的大型查詢。這限制了您可以使用像Memcache或Redis這樣的軟件進行緩存(據我所知)。對於大量查詢,您不知道哪些部分可能已被緩存。您似乎必須在較小的部分查詢所有內容,以便這些小部分可以單獨緩存。這個想法是,你只需要做幾十個小的查詢就可以填充緩存,而且大多數情況下你會打緩存而不是查詢。這是多高的PHP/MySQL網站處理這個?即使您有很多連接的大型查詢,是否有一種有效緩存的好方法?正在查詢MySQL數據庫幾十次,以便有效緩存比緩存少的大型查詢更好?
例子:
SELECT user.name, user.birthday
FROM follower
INNER JOIN user ON (user.id = follower.user)
WHERE follower.following = '1'
此查詢的結果包括可以被緩存的名字和下面的用戶1.此查詢的結果的任何用戶的生日,但得到的用戶追隨者時纔有用1.
替代:
SELECT follower.user
FROM follower
WHERE follower.following = '1'
對於每個結果?上述查詢通過follower.user填充:
SELECT name, birthday FROM user where user.id = ?
在這種情況下,我們可以檢查,看看用戶的名字和生日都從MySQL查詢之前緩存?如果它們沒有被緩存,或者有些被緩存,有些則不被緩存,然後抓取丟失的並緩存它們。您還可以緩存跟隨者ID列表,然後下次不需要運行任何查詢。不同之處在於,用戶的姓名和生日對其他任何用戶來說都是有用的,這些用戶在任何其他情況下都需要關於這些關注者的信息。
我錯過了與更大的查詢緩存的東西?或者第二種方式是正確的?
「這通常會導致大量查詢與許多聯接」,也意味着很多結果行? –
我相信用PHP有一些prepare_query函數可以在查詢上做一些工作,然後你所要做的就是設置參數來運行它。這些準備好的語句可以更快地執行大量查詢,因爲數據庫引擎無需在它們之前做所有準備工作。 –