當我在我的數據庫中進行查詢時 - 如果用戶有10k個朋友,我遇到擴展問題 - 我爲2k個朋友用戶使用的查詢不會縮放這意味着需要很長時間來處理。Scailing for MySQL Queries(Straight_Join vs Inner Join)
典型的情況是,當用戶的朋友數達到一定的閾值時,我不得不使用STRAIGHT_JOIN來提取查詢,但是我需要編寫條件語句來先查看有多少朋友,然後從那裏開始。數據越多,查詢得到的越慢。
有沒有更好的方式來擴大你的查詢通過MySQL,所以他們的工作速度相同,無論生成多少數據或我生活在一個幻想的世界?
編輯:查詢如下:對照片
SELECT photos.photo_id, count(distinct photo_views.ip_address) as total_count
FROM photos
INNER JOIN friends on friends.friend_id = photos.user_id
INNER JOIN photo_views on photos.photo_id = photo_views.photo_id
WHERE friends.user_id = 1 and friends.approved = 1
and photos.created_at >= DATE_SUB(NOW(), INTERVAL 30 DAY)
GROUP by photos.photo_id
ORDER by total_count desc
指標是:對朋友
[user_id, created_at, photo_id], [user_id], [photo_id] - PRIMARY
指標爲:在photo_views
[user_id, approved], [friend_id], [user_id, friend_id] - PRIMARY
指標是:
[photo_id] - PRIMARY
STRAIGHT_JOIN只是幫助,當你知道表的正確關係,並不希望引擎爲你思考。如果您可以發佈您試圖運行的查詢,則可能會有其他選項,例如更好的索引,或何時/何處調整WHERE子句等。 – DRapp 2012-03-22 14:57:43
我剛剛添加了上面的查詢。 – gregavola 2012-03-22 15:07:56