Day 43 索引
目錄
- 索引
- 什么是索引:
- 為什么需要索引:
- 索引的影響
- 什么樣的數(shù)據(jù)應(yīng)該添加索引:
- 磁盤IO
- 索引數(shù)據(jù)結(jié)構(gòu)
- 最左匹配原則
- 聚集索引
- 輔助索引
- 覆蓋查詢
- 回表查詢
- 結(jié)論:
- 創(chuàng)建索引的語法
- 聯(lián)合索引
- 刪除索引
索引
什么是索引:
? 可以理解為搜索引導(dǎo),索引是一個特殊的數(shù)據(jù)結(jié)構(gòu),期存儲的是數(shù)據(jù)的關(guān)鍵信息與詳細(xì)信息的位置對應(yīng)關(guān)系
為什么需要索引:
? 加速查詢,當(dāng)數(shù)據(jù)量非常大的時候,查詢一個數(shù)據(jù)是非常慢的
索引的影響
什么樣的數(shù)據(jù)應(yīng)該添加索引:
查詢操作較多寫入較少并且數(shù)據(jù)鏈很大時
查詢與寫入操作的占比大于10:1
本質(zhì)上索引原理是因可能的減小搜索范圍
磁盤IO
? 平均查找一個數(shù)據(jù)需要花費9ms,cpu會被切換到其他的程序去執(zhí)行.我們要加速查詢必須要減少IO操作的次數(shù)
索引數(shù)據(jù)結(jié)構(gòu)
? b+樹:
? 在b+樹種,葉子節(jié)點才是存儲正是數(shù)據(jù)的,葉子數(shù)量越多,樹的層級越高,導(dǎo)致IO次數(shù)增加,要避免這個問題,就應(yīng)該將數(shù)據(jù)量小的數(shù)據(jù)作為索引
最左匹配原則
? 索引在查找時,是按照從左往右依次比較,如果查詢語句沒有出現(xiàn)在最左邊的索引,將無法加速查詢
聚集索引
? 聚集索引中包含了所有字段的值,如果已指定了主鍵,主鍵就是狙擊索引,如果沒有則找一個非空且唯一的字段作為聚集索引,如果也找不到,則自動生成一個字段作為聚集索引
? 直接查詢聚集索引,當(dāng)索引中包含了所有需要的字段時,稱之為覆蓋查詢
? 聚集索引中存儲了所有的數(shù)據(jù)
輔助索引
? 除了聚集索引意外的都叫輔助索引
? 輔助索引中值包含當(dāng)前的索引字段和主鍵的值
覆蓋查詢
? 值得是在當(dāng)前索引結(jié)構(gòu)中就能找到所需的數(shù)據(jù),如果使用的是狙擊索引來查詢name一定是覆蓋查詢,速度最快
回表查詢
? 指得是在當(dāng)前索引結(jié)構(gòu)中找不到所需的數(shù)據(jù),需要通過id去聚集索引中查詢,速度慢于聚集索引
結(jié)論:
使用占用空間最小的字段來作為索引
不要在一行中存儲太多的數(shù)據(jù)
盡量使用覆蓋查詢
如果字段區(qū)分度低(重復(fù)度高),建立素銀是沒有意義的,翻過來說應(yīng)該
在模糊匹配中,備份好盡量不要寫在前面
如果要查詢的數(shù)據(jù)鏈給非常大,索引頁沒辦法加速
不要在等號的左邊做運(yùn)算內(nèi)容
and語句中會優(yōu)先執(zhí)行有索引的字段,所以我們應(yīng)該在and語句用包含一個具備索引的字段(與位置無關(guān))
避免使用or語句,or語句不會優(yōu)先執(zhí)行有索引的字段如果要用的話必須保證所有字段都有索引才能加速
聯(lián)合索引中,順序應(yīng)該將區(qū)分度最高的放到左邊,最低的放到右邊,查詢語句中必須保證最左邊的索引在查詢語句中
總結(jié):不是添加了索引就能提速,需要考慮索引添加的是否合理,sql語句是否使用到了索引
創(chuàng)建索引的語法
? create index 索引名字 on 表名稱(字段名)
聯(lián)合索引
? create index 索引的名字 on 表名稱(字段名,字段名)
刪除索引
? drop index 索引名稱 on 表名稱
?
轉(zhuǎn)載于:https://www.cnblogs.com/masterjian924/p/11264739.html
總結(jié)
- 上一篇: step3 . day7数据结构之二叉顺
- 下一篇: Android现学现用第一天