中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mysql聯合索引的使用規則有哪些

發布時間:2021-06-23 11:41:46 來源:億速云 閱讀:376 作者:chen 欄目:開發技術

這篇文章主要講解了“mysql聯合索引的使用規則有哪些”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“mysql聯合索引的使用規則有哪些”吧!

聯合索引又叫復合索引。對于復合索引:Mysql從左到右的使用索引中的字段,一個查詢可以只使用索引中的一部份,但只能是最左側部分。例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c 3種組合進行查找,但不支持 b,c進行查找 .當最左側字段是常量引用時,索引就十分有效。

從一道有趣的題目開始分析:

假設某個表有一個聯合索引(c1,c2,c3,c4)以下選項哪些字段使用了該索引:
A where c1=x and c2=x and c4>x and c3=x
B where c1=x and c2=x and c4=x order by c3
C where c1=x and c4= x group by c3,c2
D where c1=? and c5=? order by c2,c3
E where c1=? and c2=? and c5=? order by c2,c3

下面我們開始:

首先創建表:

CREATE TABLE t(
c1 CHAR(1) not null,
c2 CHAR(1) not null,
c3 CHAR(1) not null,
c4 CHAR(1) not null,
c5 CHAR(1) not null
)ENGINE myisam CHARSET UTF8;

有c1到c5 5個字段,特別說明一下 字段類型都是定長char(1)類型,并且非空,字符集是utf8(與計算索引使用字節數有關)

創建索引:

alter table t add index c1234(c1,c2,c3,c4);

插入2條數據:insert into t VALUES('1','1','1','1','1'),('2','2','2','2','2')

使用MySql Explain開始分析題目結果:

A選項:

mysql聯合索引的使用規則有哪些

mysql聯合索引的使用規則有哪些

結果可以看出,c1,c2,c3,c4均使用到了該索引,而我們對A結果稍作更改:

將c2條件去掉后:

mysql聯合索引的使用規則有哪些

根據索引最左原則,c2字段沒有使用索引,c2之后的字段都不能使用索引。下面2圖我們對比下索引最左原則:

mysql聯合索引的使用規則有哪些

上圖結果顯示直接使用c3是全表查詢,無法使用該索引的,所以c3字段使用索引的前提是c1,c2兩字段均使用了索引。

即是索引的最左原則(左前綴原則)。

B選項:

mysql聯合索引的使用規則有哪些

key_len長度說明c1,c2字段用到了該索引,Extra顯示并沒有使用臨時表進行排序,說明排序是使用了索引的,但并沒有計算在key_len值中,也沒有起到連接c4的作用,說明索引到c3這里是斷掉的。

排序其實是利用聯合索引直接完成了的,即:使用了c1234聯合索引,就已經使得c1下c2,c2下c3,c3下c4是有序的了,所以實際是排序利用了索引,c3字段并沒有使用該索引。(這段寫的時候總感覺有點別扭,不知道我理解的對不對,還有待更深層次的研究)

C選項:

mysql聯合索引的使用規則有哪些

使用group by 一般先生成臨時文件,再進行排序,但是字段順序為c2,c3時,并沒有用臨時表進行排序,而是利用索引排序好的;當group by字段為c3,c2時,由于與索引字段順序不一致,所以分組和排序并沒有利用到索引。

由key_len長度確定,只有c1一個字段使用了索引。

D選項:

mysql聯合索引的使用規則有哪些

order by 和group by 類似,字段順序與索引一致時,會使用索引排序;字段順序與索引不一致時,不使用索引。

由key_len長度確定,只有c1一個字段使用了索引。

E選項:

mysql聯合索引的使用規則有哪些

其實選項E的結果分析在上述ABCD的結果中都分析過了,這里只有c1,c2字段使用了該索引。

綜上所述問題答案:

A:四個字段均使用了該索引

B:c1,c2字段使用了該索引

C:c1字段使用該索引

D:c1字段使用該索引

E:c1,c2字段使用了該索引

總結:

索引的最左原則(左前綴原則),如(c1,c2,c3,c4....cN)的聯合索引,where 條件按照索引建立的字段順序來使用(不代表and條件必須按照順序來寫),如果中間某列沒有條件,或使用like會導致后面的列不能使用索引。

索引也能用于分組和排序,分組要先排序,在計算平均值等等。所以在分組和排序中,如果字段順序可以按照索引的字段順序,即可利用索引的有序特性。

感謝各位的閱讀,以上就是“mysql聯合索引的使用規則有哪些”的內容了,經過本文的學習后,相信大家對mysql聯合索引的使用規則有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鄂托克前旗| 阆中市| 尚志市| 宽城| 名山县| 湖南省| 逊克县| 博湖县| 双城市| 阳西县| 普洱| 忻州市| 神农架林区| 沙雅县| 滦平县| 和林格尔县| 东乡县| 景德镇市| 永州市| 陆河县| 虎林市| 锦州市| 吉木萨尔县| 新巴尔虎右旗| 邓州市| 治县。| 邵武市| 曲阳县| 尉犁县| 苍梧县| 兰西县| 德令哈市| 义马市| 杭锦后旗| 腾冲县| 长泰县| 新宁县| 库伦旗| 舞钢市| 刚察县| 永年县|