我正在使用通常在一秒內執行的查詢,但有時需要10到40秒才能完成。我其實並不完全清楚子查詢是如何工作的,我只知道它的工作原理,因爲它爲每個faverprofileid提供了15行。提高這個緩慢的MySQL查詢的提示?
我記錄緩慢的查詢,它告訴我5823244行被檢查,這很奇怪,因爲沒有任何地方接近任何涉及的表中的許多行(收藏夾表最多50,000行) 。
任何人都可以給我一些指針?這是子查詢的問題,需要使用filesort嗎?
編輯:運行解釋顯示用戶表不使用索引(即使id是主鍵)。額外說:使用臨時;使用filesort。
SELECT F.id,F.created,U.username,U.fullname,U.id,I.*
FROM favorites AS F
INNER JOIN users AS U ON F.faver_profile_id = U.id
INNER JOIN items AS I ON F.notice_id = I.id
WHERE faver_profile_id IN (360,379,95,315,278,1)
AND F.removed = 0
AND I.removed = 0
AND F.collection_id is null
AND I.nudity = 0
AND (SELECT COUNT(*) FROM favorites WHERE faver_profile_id = F.faver_profile_id
AND created > F.created AND removed = 0 AND collection_id is null) < 15
ORDER BY F.faver_profile_id, F.created DESC;
如果您在小寫字母中寫入「select」,「from」,「where」,「和」,「in」和「order by」關鍵字以及「inner」,「join」 ,「on」和「desc」只有第一個大寫字母。 – 2009-02-26 08:55:17
您是否嘗試爲創建的每個faver_profile_id排序選擇前15項? – Quassnoi 2009-02-26 09:01:11
你在桌子上運行ANALYZE嗎? – vladr 2009-02-26 15:31:37