mysql 更新索引_MySQL索引优化
MySQL支持的索引類型
B-tree索引的特點(diǎn)
1、B-tree索引以B+樹的結(jié)構(gòu)存儲數(shù)據(jù)
2、B-tree索引能夠加快數(shù)據(jù)的查詢速度
3、B-tree索引更適合進(jìn)行行范圍查找
B-tree結(jié)構(gòu)圖
在什么情況下可以用到B樹索引?
1、全值匹配的查詢
例如我們有個訂單號,訂單號為 order_sn='98764322119900'
2、匹配最左前綴的查詢
3、匹配列前綴查詢
例如:order_sn like '9876%'
4、匹配范圍值的查找
例如:order_sn > '98764322119900' and order_sn < '98764322119999'
5、精確匹配左前列并范圍匹配另外一列
6、只訪問索引的查詢
Btree索引的使用限制
1、如果不是按著索引最左列開始查找,則無法使用索引
2、使用索引時不能跳過索引中的列
3、Not in 和 <> 操作無法使用索引
4、如果查詢中有某個列的查詢范圍,則其右邊所有列都無法使用索引
Hash索引的特點(diǎn)
1、Hash索引是基于Hash表實(shí)現(xiàn)的,只有查詢條件精確匹配Hash索引中的所有列時,才能夠使用到hash索引
2、對于Hash索引中的所有列,存儲引擎都會為每一行計(jì)算一個Hash碼,Hash索引中存儲的就是Hash碼
Hash索引的限制
1、使用hash索引需要二次查找
2、Hash索引無法用于排序
3、Hash索引不支持部分索引查找也不支持范圍查找
為什么要使用索引?
1、索引大大減少了存儲引擎需要掃描的數(shù)據(jù)量
2、索引可以幫助我們進(jìn)行排序以比喵使用臨時表的IO消耗,提升MySQL的能力
3、索引可以把隨機(jī)I/O變?yōu)轫樞騃/O
索引是不是越多越好?
場景:開發(fā)人員要求來創(chuàng)建更多的索引,問:“為何要添加更多的索引?”,答:”因?yàn)閷?dǎo)入速度的時候很慢,以此來加快導(dǎo)入的速度!!!“,so..開發(fā)人員對索引的理解不是那么的透徹,雖然索引能夠?yàn)椴檎規(guī)硭俣壬系奶嵘?#xff0c;但是也會對性能有一些損失,衡量標(biāo)準(zhǔn),當(dāng)創(chuàng)建索引帶來的好處多過于消耗的時候,才是最優(yōu)的選擇~
1、索引會增加寫操作的成本
2、太多的索引會增加查詢優(yōu)化器的選擇時間
索引的優(yōu)化策略
索引列上不能使用表達(dá)式或函數(shù)
上圖中的第一個select語句中使用表達(dá)式,因此不滿足創(chuàng)建索引的要求,改為第二個select語句即可
前綴索引和索引列的選擇性
聯(lián)合索引
如何選擇索引列的順序
1、經(jīng)常會被使用到的列優(yōu)先
2、選擇性高的列優(yōu)先
覆蓋索引
優(yōu)點(diǎn):
1、可以優(yōu)化緩存,減少磁盤IO操作
2、可以減少隨機(jī)IO,使隨機(jī)IO操作變?yōu)轫樞騃O操作
3、可以避免對Innodb主鍵索引的二次查詢
4、可以避免MyISAM表進(jìn)行系統(tǒng)調(diào)用
無法使用覆蓋索引的情況
1、存儲引擎不支持覆蓋索引
2、查詢中使用了太多的列
3、使用了雙%號的like查詢
使用索引優(yōu)化查詢
使用索引掃描來優(yōu)化排序
通過排序操作
按著索引順序掃描數(shù)據(jù)
注意事項(xiàng):
1、索引的列順序和order by子句的順序完全一致
2、索引中所有列的方向(升序,降序)和order by子句完全一樣
3、order by中的字段全部在關(guān)聯(lián)表中的第一張表中
利用索引優(yōu)化🔐
1、索引可以減少鎖定的行數(shù)
2、索引以加快處理速度,同事也加快了鎖的釋放
索引的維護(hù)和優(yōu)化
刪除重復(fù)復(fù)制和容易的索引
更新索引統(tǒng)計(jì)信息及減少索引碎片
analyze table table_name
未完待續(xù),MySQL SQL語句的優(yōu)化查詢請等待下篇文章
總結(jié)
以上是生活随笔為你收集整理的mysql 更新索引_MySQL索引优化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中兴通讯发布2022年度业绩报告 实现营
- 下一篇: mysql校对规则_MYSQL校对规则