什麼是聯合索引?什麼是最左匹配原則?

2021-10-06 22:48:50 字數 1102 閱讀 4070

聯合索引是什麼

對於多個字段同時建立的索引(其中存在順序,例如abc與acb就是完全不同的兩種聯合索引)

為什麼要使用聯合索引

以聯合索引(a,b,c)為例:

建立這樣的索引相當於建立了索引a、ab、abc三個索引。乙個索引頂三個索引當然是好事,畢竟每多乙個索引,都會增加寫操作的開銷和磁碟空間的開銷。

覆蓋(動詞)索引。同樣的有聯合索引(a,b,c),如果有如下的sql:

select a,b,c from

table

where a=*** and b = ***;

那麼mysql可以直接通過遍歷索引取得資料,而無需讀表,這減少了很多的隨機io操作。減少io操作,特別的隨機io其實是dba主要的優化策略。所以,在真正的實際應用中,覆蓋索引是主要的提公升效能的優化手段之一

索引列越多,通過索引篩選出的資料越少。有1000w條資料的表,有如下sql:

select

*from

table

where a =

1and b =

2and c =

3

假設每個條件可以篩選出10%的資料,如果只有單值索引,那麼通過該索引能篩選出1000w*10%=100w 條資料,然後再回表從100w條資料中找到符合b=2 and c= 3的資料,然後再排序,再分頁;如果是復合索引,通過索引篩選出1000w *10% *10% *10%=1w,然後再排序、分頁,哪個更高效,一眼便知

使用時注意什麼

單個索引需要注意的事項,組合索引全部通用。比如索引列不要參與計算啊、or的兩側要麼都索引列,要麼都不是索引列啊、模糊匹配的時候%不要在頭部啦等等

最左匹配原則。

(a,b,c) 這樣3列,mysql會首先匹配a,然後再b,c.

如果用(b,c)這樣的資料來檢索的話,就會找不到a使得索引失效。如果使用(a,c)這樣的資料來檢索的話,就會先找到所有a的值然後匹配c,此時聯合索引是失效的。

把最常用的,篩選資料最多的字段放在左側。

mysql 最左匹配 聯合索引

mysql建立多列索引 聯合索引 有最左字首的原則,即最左優先,如 如果有乙個2列的索引 col1,col2 則已經對 col1 col1,col2 上建立了索引 如果有乙個3列索引 col1,col2,col3 則已經對 col1 col1,col2 col1,col2,col3 上建立了索引 總...

mysql 最左匹配 聯合索引

mysql建立多列索引 聯合索引 有最左字首的原則,即最左優先,如 如果有乙個2列的索引 col1,col2 則已經對 col1 col1,col2 上建立了索引 如果有乙個3列索引 col1,col2,col3 則已經對 col1 col1,col2 col1,col2,col3 上建立了索引 總...

Mysql 聯合索引最左匹配原則

二 測試現象 drop table if exists test table create table test table id int 11 not null auto increment comment 編號 namee varchar 255 default null comment 姓名 ...