1. 程式人生 > >MySQL索引未命中優化

MySQL索引未命中優化

業務SQL使用索引不見得就是優化的SQL,依然存在索引未命中的風險,例如存在多個匹配索引,可能命中的索引不是你想要的那個索引,可以通過explain來分析:

 explain SELECT count(id)  FROM active_task_log a WHERE a.add_time >= '2018-12-01' AND a.add_time <= '2018-12-20' AND a.task_class = 7 AND a.task_type = 0 AND a.del_flag = 0;

這裡重要的欄位是:

type:ALL全表掃描,未命中索引,這是最差的情況。

possible_keys:可能用到的索引

key:實際命中的索引

rows:執行查詢的行數,越小越好。

如果possible_key有索引,而key顯示實際未命中索引,則需要強制命中索引force index(idx_addTime_taskClass)

SELECT count(id)  FROM active_task_log a force index(idx_addTime_taskClass) WHERE a.add_time >= '2018-12-01' AND a.add_time <= '2018-12-20' AND a.task_class = 7 AND a.task_type = 0 AND a.del_flag = 0;

以上是最近做釘釘資料推送時遇到的SQL索引未命中的解決辦法。