MySql全局掃描與索引

1. 全表掃描

(1) 概念:將數據從頭到尾查一遍,直到找到需要的數據爲止。比如查字典中的"中",從第一個字開始查,直到找到"中"爲止。

(2) 避免全表掃描:使用索引。比如查字典中的"中",在索引頁的z序列找到"中"的具體頁數,然後直接跳到相應的頁碼。

2. 索引失效,引起全表掃描

(1) 模糊查詢(like '%a%')會引起索引失效,導致全表掃描,效率低下;

    替代方案:使用instr,比如SELECT *FROM biz_service_iaas WHERE INSTR(id, '2d3b') > 0 等效於 id like '%2d3b%'

(2) 不等於(<>、!=)會引起索引失效,導致全表掃描

    替代方案:通過把不等於操作符改成or,可以使用索引,避免全表掃描。例如,把column<>’aaa’,

    改成column <’aaa’ or  column>’aaa’,就可以使用索引了。

(3) not in會引起索引失效,導致全表掃描

     替代方案:使用not exists,比如

3. 查看如何命中索引

explain
SELECT *FROM biz_service_iaas WHERE service_iaas_name = '雲主機' 

select_type:  表示對應行是是簡單還是複雜的查詢

type: 查詢效率類別,依次從最優到最差分別爲:system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL

possible_keys: 顯示查詢可能使用哪些索引來查找,會出現 possible_keys 有列,而 key 顯示 NULL 的情況,這是因爲表中數據不多,索引對此查詢幫助不大,選擇了全表查詢。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章