我有查詢: 創建MySQL的索引
EXPLAIN SELECT * FROM _mod_news USE INDEX (ind1) WHERE show_lv =1 AND active =1 AND START <= NOW()
AND (END >= NOW() OR END = "0000-00-00 00:00:00") AND id <> "18041" AND category_id = "3" AND leta =1 ORDER BY sort_id ASC , DATE DESC LIMIT 7
結果:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE _mod_news ref ind1 ind1 2 const,const 11386 Using where; Using filesort
MySQL是執行全表掃描
IND1 =
ALTER TABLE `_mod_news` ADD INDEX ind1 (`show_lv`, `active`, `start`, `end`, `id`, `category_id`, `leta`, `sort_id`, `date`);
我對以下指標進行測試,但沒有任何變化
ALTER TABLE `_mod_news` ADD INDEX ind1 (`show_lv`, `active`, `start`, `end`, `id`, `category_id`, `leta`);
的問題是:我在哪裏可以學習如何在許多創建索引,有條件的地方?或者有人可以解釋如何告訴mysql使用和索引而不是掃描整個表。 謝謝。
您的'WHERE'子句中的所有列都需要位於要使用的索引的索引上。 – Kermit
我已經有了這個索引。也許MySQL不喜歡'OR'? – Guntis
您可能需要在保留字周圍使用刻度線,例如'END'。 – Kermit