聯合索引的最左字首匹配原則
https://www.jianshu.com/p/b7911e0394b0
CREATE TABLE `user2` (
`userid` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(20) NOT NULL DEFAULT '',
`password` varchar(20) NOT NULL DEFAULT '',
`usertype` varchar(20) NOT NULL DEFAULT '',
PRIMARY KEY (`userid`),
KEY `a_b_c_index` (`username`,`password`,`usertype`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
上表中有一個聯合索引,下面開始驗證最左匹配原則。
當存在username時會使用索引查詢:
explain select * from user2 where username = '1' and password = '1';
Paste_Image.png
當沒有username時,不會使用索引查詢:
explain select * from user2 where password = '1';
Paste_Image.png
當有username,但順序亂序時也可以使用索引:
explain select * from user2 where password = '1' and username = '1';
Paste_Image.png
在最左匹配原則中,有如下說明:
- 最左字首匹配原則,非常重要的原則,mysql會一直向右匹配直到遇到範圍查詢(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)順序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引則都可以用到,a,b,d的順序可以任意調整。
- =和in可以亂序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意順序,mysql的查詢優化器會幫你優化成索引可以識別的形式
相關文章
- Mysql中聯合索引的最左匹配原則MySql索引
- 索引最左匹配原則索引
- MySQL組合索引和最左匹配原則MySql索引
- 面試中常被提到的最左字首匹配原則面試
- 關於SQL Server索引的最左匹配原則SQLServer索引
- MySQL學習筆記:組合索引-最左原則MySql筆記索引
- 我去,為什麼最左字首原則失效了?
- MySQL索引的最左字首原理與查詢的相關優化MySql索引優化
- 組合索引的選擇原則索引
- redis哨兵 ,redis叢集 快取 以及某些問題: 最左字首原則,,celery架構Redis快取架構
- 聯合索引和多個單列索引使用中的索引命中情況及索引建立原則索引
- intentFiltger的匹配原則Intent
- MySQL實驗: 實踐索引對全列匹配、最左字首匹配、範圍查詢等條件的影響以及瞭解髒讀、幻讀等MySql索引
- 本地索引、全域性索引、字首索引、非字首索引索引
- MySQL索引(二):建索引的原則MySql索引
- MySQL的聯合索引MySql索引
- 索引的選擇原則索引
- MySQL索引建立原則MySql索引
- MySQL 索引的設計原則MySql索引
- mysql索引之字首索引MySql索引
- 兩列複合索引中(交換索引中列的順序),選索引的原則是?因為索引名字ascii碼小?索引ASCII
- 資料庫建立索引的原則資料庫索引
- mysql 索引設計原則MySql索引
- MySQL 字串索引和字首索引MySql字串索引
- 【Mysql】InnoDB 中的聚簇索引、二級索引、聯合索引MySql索引
- mysql聯合索引的選擇性MySql索引
- mysql建立字首索引MySql索引
- 資料庫索引的設計原則資料庫索引
- 建立索引的原則-以innodb為例索引
- oracle聯合索引在CBO下的分析Oracle索引
- SQL優化(二)(聯合索引的使用)SQL優化索引
- MySQL 聯合索引測試3MySql索引
- MySQL 字首索引——讓索引減負狂奔MySql索引
- MySQL字首索引和索引選擇性MySql索引
- Mysql研磨之設計索引原則MySql索引
- mysql 聯合索引的兩種特殊場景MySql索引
- 正則匹配閉合HTML標籤(支援巢狀)HTML巢狀
- mysql 建立和刪除聯合索引MySql索引