一篇解決MySQL索引優(yōu)化

定義:幫助MySQL高效獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。簡單理解為排好序快速查找數(shù)據(jù)(BTree)結(jié)構(gòu)。以索引文件的形式存儲在磁盤上。


平常所說的索引默認(rèn)為BTree結(jié)構(gòu)組織的索引,其中聚集索引、次要索引、復(fù)合索引、前綴索引、唯一索引默認(rèn)都是使用B+樹索引,除此外還有哈希索引等。


  • 優(yōu)勢:提高檢索效率,降低數(shù)據(jù)庫IO成本;索引列對數(shù)據(jù)排序,降低數(shù)據(jù)排序成本,降低CPU消耗。
  • 劣勢:實際上索引也是一張表,該表保存主鍵與索引字段,并指向?qū)嶓w表的記錄,所以索引列也要占空間;雖然索引提高查詢速度,同時會降低表更新速度,因為mysql不僅要保存數(shù)據(jù),還要保存索引文件每次更新添加索引列的字段。

分類:單值索引、唯一索引、復(fù)合索引


  • 需要創(chuàng)建索引情況:1、逐漸自動建立唯一索引;2、頻繁作為查詢條件的字段;3、外鍵關(guān)系建立索引;4、排序字段作索引提升排序速度;5、統(tǒng)計或分組字段作索引。
  • 不需要建索引情況:表記錄少(<300W);頻繁更新字段;where條件里用不到的字段;索引列中重復(fù)數(shù)據(jù)多。

索引優(yōu)化

  1. left join:根據(jù)左連接特性,leftjoin用于確定如何從右表搜索行,左邊一定有,故而右邊是關(guān)鍵點,要建索引。
  2. 同理right join左邊表建索引。
  3. 防止索引失效的十條
    (1)全值匹配我最愛
    (2)最佳左前綴法則 —— 組合索引中要遵循最左前綴法則,指的是查詢從索引的最左前列開始并且不跳過索引中的列。
    (3)不在索引列上做任何操作,包括計算、函數(shù)、自動或手動類型轉(zhuǎn)換,會導(dǎo)致索引失效而全表掃描。
    (4)索引中范圍條件右邊的列都失效
    (5)盡量使用覆蓋索引,減少select *
    (6)在使用!= <>的時候無法使用索引
    (7)is null,is not null無法使用索引
    (8)like以通配符開頭,如'%abc...'無法使用索引,'abc...%'這樣的可以。
    若非要使用'%abc%',那么select的字段不能超過索引列。
    (9)字符串不加單引號索引失效
    (10)少使用or,做連接時索引失效
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容