下面的查詢是相對緩慢(0.7秒〜6K行)MySQL的慢組通過/以便通過
SELECT items.*, COUNT(transactions.ID)
FROM items
INNER JOIN users ON (items.USER = users.ID)
LEFT JOIN transactions ON (items.id = transactions.item)
WHERE items.ACTIVE = 1
AND items.DELETED_AT IS NULL
GROUP BY items.ID
ORDER BY items.DATE DESC
LIMIT 20
但是,當通過items.ID DESC代替items.DATE有序顯着加快。事務連接到一個大表(〜250k行)並且是一對多的。日期列有一個索引。
有什麼辦法一般地改善ORDER BY的性能嗎?
編輯:對items.user,transactions.item和items.date的索引。項目有49列,用戶76和交易17.
你可以提供模式,特別是三個表的索引? – TetonSig 2011-12-25 20:56:43
我能想到的唯一事情是首先選擇由WHERE子句篩選並按子查詢日期排序的項目(或者在視圖中,如果MySQL不支持子查詢中的ORDER BY),然後在封閉查詢中執行你的加入。 (我不會寫這個作爲答案,因爲SO不鼓勵推測性答案。) – 2011-12-25 20:57:49
你有沒有嘗試在'GROUP BY'中包含'items.DATE'(在第一個位置)? – 2011-12-25 23:16:15