mysql普通索引命中 mysql索引命中規則

2021-10-17 12:18:21 字數 859 閱讀 6856

轉於:

首先明確:為什麼要用聯合索引?

對於查詢語句「select e.* from e where e.e1=1 and e.e3=2」涉及到兩列,這個時候我們一般採用乙個聯合索引(e1, e3);而不用兩個單列索引,這是因為一條查詢語句往往應為mysql優化器的關係只用乙個索引,就算你有兩個索引,他也只用乙個;在只用乙個的基礎之上,聯合索引是會比單列索引要快的;

下面講講聯合索引的使用規則和哪些情況會命中不了聯合索引

示例如下。首先建立表:

create table e (e1 int, e2 varchar(9), e3 int, primary key(e1, e3));

這樣就建立了乙個聯合索引:e1,e3

測試資料

insert into e

(e1, e2, e3)

values(1, 'aa', 2);

觸發聯合索引是有條件的:

1、使用聯合索引的全部索引鍵,可觸發索引的使用。

例如:select e.* from e where e.e1=1 and e.e3=2

2、使用聯合索引的字首部分索引鍵,如「key_part_1 常量」,可觸發索引的使用。

例如:select e.* from e where e.e1=1

3、使用部分索引鍵,但不是聯合索引的字首部分,如「key_part_2 常量」,不可觸發索引的使用。

例如:select e.* from e where e.e3=1

4、使用聯合索引的全部索引鍵,但索引鍵不是and操作,不可觸發索引的使用。

例如:select e.* from e where e.e3=2 or e.e1=1

以上通過explain測試即可看出效果

MYSQL索引命中率

一 mysql 索引型別 1 從物理儲存角度上,索引可以分為聚集索引和非聚集索引。聚集索引 clustered index 聚集索引決定資料在磁碟上的物理排序,乙個表只能有乙個聚集索引。非聚集索引 non clustered index 非聚集索引並不決定資料在磁碟上的物理排序,索引上只包含被建立索...

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聯合索引命中條件

轉於 首先明確 為什麼要用聯合索引?對於查詢語句 select e.from e where e.e1 1 and e.e3 2 涉及到兩列,這個時候我們一般採用乙個聯合索引 e1,e3 而不用兩個單列索引,這是因為一條查詢語句往往應為mysql優化器的關係只用乙個索引,就算你有兩個索引,他也只用乙...