定義
聯(lián)合索引是MySQL中常用的索引類型之一,它是由多個列組合而成的索引。聯(lián)合索引可以幫助優(yōu)化查詢,提高查詢效率,尤其是在多個列同時參與查詢時。
最左匹配是指在聯(lián)合索引中,如果查詢條件中只涉及到聯(lián)合索引中的最左側(cè)列,那么可以利用該聯(lián)合索引進(jìn)行快速匹配。如果查詢條件中還涉及到聯(lián)合索引中的其他列,那么查詢優(yōu)化器可能無法充分利用聯(lián)合索引,從而導(dǎo)致性能下降。
范圍查詢是指查詢條件中涉及到了比較運算符(>, <, >=, <=, BETWEEN, IN等),這類查詢條件無法使用“=”運算符進(jìn)行匹配,需要進(jìn)行范圍匹配。最左匹配原則遇到范圍查詢就停止匹配。
例:
id | name | age | address
現(xiàn)在要在該表上建立一個聯(lián)合索引,由name和age組成,即:
CREATE INDEX idx_name_age ON t (name, age);
設(shè)有兩個查詢:
- SELECT id FROM t WHERE id > 5 AND age>25;
- SELECT id FROM t WHERE age>25;
- SELECT id FROM t WHERE id = 5 AND age>25;
查詢一,可以使用聯(lián)合索引進(jìn)行最左匹配。查詢優(yōu)化器可以利用聯(lián)合索引進(jìn)行快速匹配,定位到符合條件的數(shù)據(jù)行。
查詢二,不可以匹配;雖然也涉及到了聯(lián)合索引的一部分age,但是查詢條件中沒有涉及到聯(lián)合索引的最左側(cè)列id,因此無法進(jìn)行最左匹配。在這種情況下,查詢優(yōu)化器可能會選擇全表掃描或者使用其他索引進(jìn)行查詢,從而導(dǎo)致性能下降。
查詢?nèi)豢梢云ヅ?;最左匹配原則遇到范圍查詢就停止匹配。
Q:SELECT id FROM t WHERE age>25 AND id > 5 ; 是否可以匹配索引?
能;Mysql有優(yōu)化器會自動調(diào)整順序與索引順序一致。
Q: 對下面的查詢?nèi)绾谓⒉樵儯?/p>
SELECT * FROM table?
WHERE a = 1 and b = 2 and c = 3;?
重點要的是將區(qū)分度高的字段放在前面,區(qū)分度低的字段放后面。像性別、狀態(tài)這種字段區(qū)分度就很低,我們一般放后面。
例如假設(shè)區(qū)分度由大到小為b,a,c
。那么我們就對(b,a,c)
建立索引。在執(zhí)行sql的時候,優(yōu)化器會幫我們調(diào)整where
后a,b,c
的順序,讓我們用上索引。文章來源:http://www.zghlxwxcb.cn/news/detail-406099.html
REF:(28條消息) mysql 聯(lián)合索引_TanaStudy的博客-CSDN博客文章來源地址http://www.zghlxwxcb.cn/news/detail-406099.html
到了這里,關(guān)于聯(lián)合索引,最左匹配,范圍查詢的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!