在解釋索引命中規則的前提下, 先了解一下如下原則:
最左字首匹配原則, 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 的查詢優化器會幫你優化成索引可以識別的形式.
使用情況:
對於查詢語句"select e.* from e where e.e1=1 and e.e3=2"涉及到兩列, 這個時候我們一般採用乙個聯合索引(e1, e3); 而不用兩個單列索引, 這是因為一條查詢語句往往應為mysql優化器的關係只用了乙個索引, 就算你有兩個索引, 他也只會用到乙個(mysql的最左匹配原則) ; 在只用到乙個的基礎上, 聯合索引是會比單列索引要快的;
命中規則:
示例: create table e(e1 int, e2 varchat(9), e3 int, primary key(e1, e3));
這樣就建立了乙個聯合索引: e1, e3
使用聯合索引的全部索引鍵, 可觸發索引的使用.
如: select e.* from e where e.e1=1 and e.e3=2
查詢條件中包含索引的字首部分, 也就是 e1, 可以觸發索引的使用
如: select e.* from e where e.e1=1
使用部分索引鍵, 但不包含索引的字首部分,不可觸發索引的使用。
如: select e.* from e where e.e3=1
使用聯合索引的全部索引鍵, 但不是and操作, 不可以觸發索引的使用
如: select e.* from e where e.e3=2 or e.e1=1
2.普通索引
就是最基本的索引, 查他就能命中
3. 唯一索引
和普通索引類似, 不同的就是索引的列必須是唯一存在的, 可以為空
4. 全文索引
只支援老版本的mysql 也就是引擎為myisam的資料表.
索引命中規則
t這張表 a,b,c 三個字段組成組合索引 select from t where a and b and c 全命中 select from t where c and b and a 全命中 解析mysql的查詢優化器會自動調整where子句的條件順序以使用適合的索引 select from t...
多個索引時,mysql索引的命中規則
在解釋索引命中規則的前提下,先了解一下如下原則 最左匹配原則 最左字首匹配原則,mysql會乙隻向右匹配直到遇到範圍查詢 between,like 就停止匹配,比如a 1 and b 2 and c 3 and d 4 如果建立了 a,b,c,d 順序的索引,d是用不到索引的,如果建立 a,b,d,...
mysql普通索引命中 mysql索引命中規則
轉於 首先明確 為什麼要用聯合索引?對於查詢語句 select e.from e where e.e1 1 and e.e3 2 涉及到兩列,這個時候我們一般採用乙個聯合索引 e1,e3 而不用兩個單列索引,這是因為一條查詢語句往往應為mysql優化器的關係只用乙個索引,就算你有兩個索引,他也只用乙...