索引命中規則

2021-09-29 22:32:40 字數 1060 閱讀 6050

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 where a=? 命中a 解析:最左字首匹配

select * from t where a=? and b=? 命中a和b 解析:最左字首匹配

select * from t where a=? or b=? 乙個沒命中 解析or無法命中

select * from t where a=? and c=? 命中a 解析:最左字首匹配,中間沒有則無法使用索引

select * from t where a=? and b in ( x, y, z) and c=? 全部命中 in精確匹配可以使用索引

select * from t where b=? 乙個沒命中 解析:最左字首匹配原則

select * from t where b=? and c=? 乙個沒命中 解析:最左字首匹配原則

select * from t where a=? and b like '***%' 命中a和b

select * from t where a=? and b like '%***' 命中a

select * from t where a<? and b=? 命中a 解析這個是範圍查詢

select * from t where a between ? and ? and b=? 命中a和b 解析between相當於in操作是精確匹配

select * from t where a between ? and ? and b=? and c and between ? and ? 全部命解析中同上

select * from where a-1=? 函式和表示式無法命中索引

t這張表只有 a欄位組成的索引

依據 最左字首匹配 原則

MySql 索引的命中規則

在解釋索引命中規則的前提下,先了解一下如下原則 最左字首匹配原則,mysql會乙隻向右匹配直到遇到範圍查詢 between,like 就停止匹配,比如a 1 and b 2 and c 3 and d 4 如果建立了 a,b,c,d 順序的索引,d是用不到索引的,如果建立 a,b,d,c 的索引,則...

多個索引時,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優化器的關係只用乙個索引,就算你有兩個索引,他也只用乙...