mysql 更新索引_MySQL索引优化
MySQL支持的索引類型
B-tree索引的特點
1、B-tree索引以B+樹的結構存儲數據
2、B-tree索引能夠加快數據的查詢速度
3、B-tree索引更適合進行行范圍查找
B-tree結構圖
在什么情況下可以用到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索引的特點
1、Hash索引是基于Hash表實現的,只有查詢條件精確匹配Hash索引中的所有列時,才能夠使用到hash索引
2、對于Hash索引中的所有列,存儲引擎都會為每一行計算一個Hash碼,Hash索引中存儲的就是Hash碼
Hash索引的限制
1、使用hash索引需要二次查找
2、Hash索引無法用于排序
3、Hash索引不支持部分索引查找也不支持范圍查找
為什么要使用索引?
1、索引大大減少了存儲引擎需要掃描的數據量
2、索引可以幫助我們進行排序以比喵使用臨時表的IO消耗,提升MySQL的能力
3、索引可以把隨機I/O變為順序I/O
索引是不是越多越好?
場景:開發人員要求來創建更多的索引,問:“為何要添加更多的索引?”,答:”因為導入速度的時候很慢,以此來加快導入的速度!!!“,so..開發人員對索引的理解不是那么的透徹,雖然索引能夠為查找帶來速度上的提升,但是也會對性能有一些損失,衡量標準,當創建索引帶來的好處多過于消耗的時候,才是最優的選擇~
1、索引會增加寫操作的成本
2、太多的索引會增加查詢優化器的選擇時間
索引的優化策略
索引列上不能使用表達式或函數
上圖中的第一個select語句中使用表達式,因此不滿足創建索引的要求,改為第二個select語句即可
前綴索引和索引列的選擇性
聯合索引
如何選擇索引列的順序
1、經常會被使用到的列優先
2、選擇性高的列優先
覆蓋索引
優點:
1、可以優化緩存,減少磁盤IO操作
2、可以減少隨機IO,使隨機IO操作變為順序IO操作
3、可以避免對Innodb主鍵索引的二次查詢
4、可以避免MyISAM表進行系統調用
無法使用覆蓋索引的情況
1、存儲引擎不支持覆蓋索引
2、查詢中使用了太多的列
3、使用了雙%號的like查詢
使用索引優化查詢
使用索引掃描來優化排序
通過排序操作
按著索引順序掃描數據
注意事項:
1、索引的列順序和order by子句的順序完全一致
2、索引中所有列的方向(升序,降序)和order by子句完全一樣
3、order by中的字段全部在關聯表中的第一張表中
利用索引優化🔐
1、索引可以減少鎖定的行數
2、索引以加快處理速度,同事也加快了鎖的釋放
索引的維護和優化
刪除重復復制和容易的索引
更新索引統計信息及減少索引碎片
analyze table table_name
未完待續,MySQL SQL語句的優化查詢請等待下篇文章
總結
以上是生活随笔為你收集整理的mysql 更新索引_MySQL索引优化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中兴通讯发布2022年度业绩报告 实现营
- 下一篇: mysql校对规则_MYSQL校对规则