Mysql 聯合索引使用情況測試

2021-10-22 01:34:49 字數 1177 閱讀 8270

# 建立索引  ***是表名  a,b,c是建立索引的欄位名

alter table *** add index `sindex` (`a`,`b`,`c`);

# 情況一 使用單條件查詢時,索引使用情況如下 (只會用到 a 的索引)

# type=ref,key=sindex,key_len=163,ref=const

select * from *** where a = '1';

# 沒有使用到索引 type=all

select * from *** where b = '1';

# 沒有使用到索引 type=all

select * from *** where c = '1';

## 情況二 使用索引的兩個條件

# type=ref,key=sindex,key_len=966,ref=const,const

select * from *** where a = '1' and b = '1';

# type=ref,key=sindex,key_len=966,ref=const,const

select * from *** where b = '1' and a = '1';

# 上面互換位置後,索引使用情況一致,說明sql順序不會影響索引。感覺應該是mysql在執行查詢前,會自動優化。

# type=ref,key=sindex,key_len=163,ref=const 只會用到a索引

select * from *** where a = '1' and c = '1';

# 沒有使用到索引 type=all

select * from *** where b = '1' and c = '1';

### 情況三 使用索引的三個條件

# type=ref,key=sindex,key_len=1129,ref=const,const,const 使用到3個索引

select * from *** where a = '1' and b = '1' and c = '1';

總結:

建立a,b,c聯合索引就相當於建立了 (a),(a,b),(a,b,c) 3個索引。

檢視索引使用情況

檢視乙個索引是否正確建立,可以參考下這兩個引數 handler read key 和 handler read rnd next。如果索引正在工作,handler read key 的值將很高,這個值代表了乙個行被索引值讀取的次數,很低的值則表明增加索引得到的效能不高,因為索引並不經常使用。hand...

組合索引使用情況

組合索引查詢的各種場景 茲有 index a,b,c 組合索引多字段是有序的,並且是個完整的btree 索引。下面條件可以用上該組合索引查詢 a 5 a 5 and b 6 a 5 and b 6 and c 7 a 5 and b in 2,3 and c 5 下面條件將不能用上組合索引查詢 b ...

mysql 檢視索引的使用情況

show status like handler read variable name value handler read first 0 handler read key 0 handler read last 0 handler read next 0 handler read prev 0 ...