MySQL最左匹配是指在數(shù)據(jù)庫索引查詢時(shí),對于多列索引,在查詢時(shí)只能使用該索引的最左前綴部分來查找匹配行。
例如有一個(gè)多列索引:(col1, col2, col3),如果查詢語句中只有col1作為where條件,則MySQL將使用該索引進(jìn)行查詢。如果查詢語句中只有col1和col2作為where條件,則MySQL也將使用該索引進(jìn)行查詢。但是,如果查詢語句中只有col2和col3作為where條件,則MySQL無法使用該索引進(jìn)行查詢。
這是因?yàn)槎嗔兴饕前凑樟械捻樞虼鎯?chǔ)的。當(dāng)我們查詢時(shí),MySQL只能從最左邊的列開始,逐一匹配,直到到達(dá)一個(gè)無法匹配的列為止。如果我們在查詢中跳過了索引的最左邊列,則MySQL無法在該索引上執(zhí)行查詢。
例如,有以下的數(shù)據(jù)表students: +----+---------+-------+---------+ | id | name | class | score | +----+---------+-------+---------+ | 1 | Tom | 1 | 89 | | 2 | Jack | 2 | 78 | | 3 | Rose | 1 | 92 | | 4 | Alice | 2 | 80 | +----+---------+-------+---------+ 如果我們創(chuàng)建了索引(class,score),那么以下查詢可以使用該索引: SELECT * FROM students WHERE class = 1; SELECT * FROM students WHERE class = 1 AND score >90; 但是以下查詢無法使用該索引,因?yàn)閟core不是在class之前的索引列: SELECT * FROM students WHERE score >90; 注意,最左匹配對于聯(lián)合索引也同樣適用。如果一個(gè)查詢中針對聯(lián)合索引的前兩個(gè)列,那么該索引可以生效,但如果查詢中只使用了后面的列,那么該索引無法生效。