欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

mysql為什么會(huì)最左匹配

錢琪琛2年前9瀏覽0評論

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è)列,那么該索引可以生效,但如果查詢中只使用了后面的列,那么該索引無法生效。