正確理解Mysql中的列索引和多列索引

2022-10-06 01:54:11 字數 1577 閱讀 9353

mysql資料庫提供兩種型別的索引,如果沒正確設定,索引的利用效率會大打折扣卻完全不知問題出在這。

create table test (

id int not null,

last_name char(30) not null,

f程式設計客棧irst_name char(30) not null,

primary key (id),

index name (last_name,first_name)

);以上建立的其實是乙個多列索引,建立列索引的代www.cppcns.com碼如下:

create table test (

id int not null,

last_name char(30) not null,

first_name char(30) not null,

primary key (id),

index nawww.cppcns.comme (last_name),

index_2 name (first_name)程式設計客棧

);乙個多列索引可以認為是包含通過合併(concatenate)索引列值建立的值的乙個排序陣列。 當查詢語句的條件中包含last_name 和 first_name時,例如:

select * from test where last_name='kun' and first_name='li';

sql會先過濾出last_name符合條件的記錄,在其基礎上在過濾first_name符合條件的記錄。那如果我們分別在last_name和first_name上建立兩個列索引,mysql的處理方式就不一樣了,它會選擇乙個最嚴格的索引來進行檢索,可以理解為檢索能力最強的那個索引來檢索,另外乙個利用不上程式設計客棧了,這樣效果就不如多列索引了。

但是多列索引的利用也是需要條件的,以下形式的查詢語句能夠利用上多列索引:

select * from test where last_name='widenius';

select * from test where last_name='widenius' and first_name='michael';

select * from test where last_name='widenius' and (first_name='michael' or first_name='monty');

select * from test where last_name='widenius' and first_name >='m' and first_name < 'n';

以下形式的查詢語句利用不上多列索引:

select * from test where first_name='michael';

select * from test where last_name='widenius' or first_name='michael';

多列建索引比對每個列分別建索引更有優勢,因為索引建立得越多就越佔磁碟空間,在更新資料的時候速度會更慢。

另外建立多列索引時,順序也是需要注意的,應該將嚴格的索引放在前面,這樣篩選的力度會更大,效率更高。

本文標題: 正確理解mysql中的列索引和多列索引

本文位址:

正確理解Mysql的列索引和多列索引

1 如果表有乙個多列索引,優化器可以使用最左面的索引字首來找出行。select from tbl name where col1 val1 select from tbl name where col1 val1 and col2 val2 select from tbl name where co...

復合索引的正確理解

復合索引的結構 參考 mysql技術內幕 innodb儲存引擎 第2版 復合索引的結構 首先正確的認識復合索引的結構,非葉子節點上是存在索引值的 例如以a b欄位建立復合索引,那排列如下 通過葉子節點,就能拿到資料 1,1 1,2 2,1 2,4 3,1 3,2 索引使用數量 參考 對於c1 c2 ...

正確理解Java中的Future

說到這個相信很多剛入行的程式設計師,對這個並不是很熟悉,這個單詞的意思是未來 簡單的給它闡述一下 這是乙個物件,儲存的耗時操作給它賦的值,我們先拿到他的引用,等他有值了,就可以使用。通俗的講,就是我拿到乙個變數的引用,裡面沒有值,子執行緒計算完了,把值賦值給它,我後面就可以用,不用我一直等子執行緒執...