MySQL 聯合索引的命中規則

爲何要用聯合索引?mysql

對於查詢語句「SELECT T.* FROM T WHERE T.c1=1 AND T.c3=2」涉及到兩列,這個時候咱們通常採用一個聯合索引(c1, c3);而不用兩個單列索引,這是由於一條查詢語句每每應爲mysql優化器的關係只用一個索引,就算你有兩個索引,他也只用一個;在只用一個的基礎之上,聯合索引是會比單列索引要快的;sql

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

示例以下。首先建立表: CREATE TABLE T (c1 INT, c2 VARCHAR(9), c3 INT, PRIMARY KEY(c1, c3)); 這樣就創建了一個聯合索引:c1,c3優化

觸發聯合索引是有條件的: 一、使用聯合索引的所有索引鍵,可觸發索引的使用。 例如:SELECT T.* FROM T WHERE T.c1=1 AND T.c3=2索引

二、使用聯合索引的前綴部分索引鍵,如「key_part_1 <op>常量」,可觸發索引的使用。 例如:SELECT T.* FROM T WHERE T.c1=1基礎

三、使用部分索引鍵,但不是聯合索引的前綴部分,如「key_part_2 <op>常量」,不可觸發索引的使用。 例如:SELECT T.* FROM T WHERE T.c3=1查詢

四、使用聯合索引的所有索引鍵,但索引鍵不是AND操做,不可觸發索引的使用。 例如:SELECT T.* FROM T WHERE T.c3=2 OR T.c1=1

相關文章
相關標籤/搜索