我有100,000行,並且此查詢有時可能需要2秒以上。我試圖優化它,併成功將DESC創建的字段編入索引。我試圖進一步優化這個查詢,並且想知道這個查詢是否真的加入了所有100,000行的「軌道」,而不僅僅是我實際需要的12個。這可能會導致一個較慢的查詢?MySql加入後選擇 - 慢速查詢
查詢:
SELECT `p`.`id` as performance_id, `p`.`performers`, `t`.`name` as track_name, `p`.`location`, `p`.`fms_id`
FROM (`performances` p)
JOIN `tracks` t ON `p`.`track` = `t`.`id`
WHERE (p.status = 1 OR (p.status != 2 && p.flagged < 3))
AND `p`.`prop` IN ('1', '2', '3', '4', '5', '6', '8', '10', '11', '13')
AND `p`.`track` IN ('17', '9', '5', '15', '2', '3', '8', '6', '12', '4', '1')
AND `p`.`type` IN ('1', '0', '2')
ORDER BY `p`.`created` desc
LIMIT 0, 12
說明:曲目列表
1 SIMPLE p index track,prop,flagged,status,type created_desc 5 NULL 239 Using where
1 SIMPLE t eq_ref PRIMARY PRIMARY 4 database_name.p.track 1 Using where
你應該還會發布查詢中涉及的表和您擁有的其他索引。 –
嘗試使用JOIN ....將所有IN語句移動到JOIN。作爲WHERE子句只保留WHERE(p.status = 1 OR(p.status!= 2 && p.flagged <3))。 – gview
在performance表的'track'列上創建索引會給出所需的行爲(查詢不會加入所有100,000行的「軌跡」。) – Bala