聯合索引的最左字首匹配原則
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筆記索引
- 我去,為什麼最左字首原則失效了?
- apisix~路由字首的正則匹配API路由
- 聯合索引和多個單列索引使用中的索引命中情況及索引建立原則索引
- redis哨兵 ,redis叢集 快取 以及某些問題: 最左字首原則,,celery架構Redis快取架構
- MySQL實驗: 實踐索引對全列匹配、最左字首匹配、範圍查詢等條件的影響以及瞭解髒讀、幻讀等MySql索引
- MySQL索引(二):建索引的原則MySql索引
- MySQL的聯合索引MySql索引
- MySQL 索引的設計原則MySql索引
- MySQL索引建立原則MySql索引
- mysql索引之字首索引MySql索引
- mysql 索引設計原則MySql索引
- MySQL 字串索引和字首索引MySql字串索引
- mysql建立字首索引MySql索引
- 【Mysql】InnoDB 中的聚簇索引、二級索引、聯合索引MySql索引
- Mysql研磨之設計索引原則MySql索引
- 使用聯合索引的一種情況索引
- MySQL-08.索引的建立和設計原則MySql索引
- mysql字首索引是什麼MySql索引
- mysql 聯合索引的兩種特殊場景MySql索引
- 資料庫系列:字首索引和索引長度的取捨資料庫索引
- mysql 建立和刪除聯合索引MySql索引
- 正則匹配規則2
- 對線面試官:Mysql組合索引的生效規則面試MySql索引
- python的re正則匹配Python
- MySQL建立表的時候建立聯合索引的方法MySql索引
- SQL優化案例-分割槽索引之無字首索引(六)SQL優化索引
- Oracle優化案例-分割槽索引之無字首索引(六)Oracle優化索引
- 「 MySQL高階篇 」MySQL索引原理,設計原則MySql索引
- 正則匹配規則記錄
- 組合數字首和
- 《MySQL 進階篇》十三:索引的使用以及設計原則MySql索引
- 正則匹配的捕獲組