我有以下查詢:查詢與LEFT JOIN和ORDER BY ... LIMIT慢,使用文件排序
SELECT
fruit.date,
fruit.name,
fruit.reason,
fruit.id,
fruit.notes,
food.name
FROM
fruit
LEFT JOIN
food_fruits AS ff ON fruit.fruit_id = ff.fruit_id AND ff.type='fruit'
LEFT JOIN
food USING (food_id)
LEFT JOIN
fruits_sour AS fs ON fruits.id = fs.fruit_id
WHERE
(fruit.date < DATE_SUB(NOW(), INTERVAL 180 DAY))
AND (fruit.`status` = 'Rotten')
AND (fruit.location = 'USA')
AND (fruit.size = 'medium')
AND (fs.fruit_id IS NULL)
ORDER BY `food.name` asc
LIMIT 15 OFFSET 0
和所有你所能想的指標,包括正在使用的情況如下:
fruit - fruit_filter (size, status, location, date)
food_fruits - food_type (type)
food - food (id)
fruits_sour - fruit_id (fruit_id)
我甚至有我本以爲這工作得更好,其沒有被使用的索引:
food_fruits - fruit_key (fruit_id, type)
food - id_name (food_id, name)
的不幸的是,子句導致使用temporary
表和filesort
。沒有這個,查詢會運行分裂。我怎樣才能得到這個查詢不需要filesort
?我錯過了什麼?
編輯:
的解釋:
您可以在此查詢上運行EXPLAIN併發布輸出嗎? – Ashalynd 2014-12-05 23:14:44
@Ashalynd是的,雖然格式可能有點奇怪。 – MirroredFate 2014-12-05 23:22:31