日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql最左_Mysql最左原则

發布時間:2024/7/5 数据库 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql最左_Mysql最左原则 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 前言

偶然看到一個技術群,對一道關于聯合索引的討論。面試題如下:

a_b_c_index 三列復合索引 a =1 and b<100 and c=5 這個查詢 會用到索引的那幾部分?

復制代碼

先說下個人經過本人查詢多方資料得到的結論, 只會用到 a 和 b部分(這里和群里小伙伴的討論結果一致,如果有疑問可以后續探討)。

2. 驗證

要驗證這個需要觀察explain結果中 key、key_len。key 代表用到的索引。key_len 代表索引使用的字節數,當索引的類型為int且默認值可以為null的時候,用到索引則key_len為4。

接下來是表結構:

CREATE TABLE `test` (

`id` int unsigned NOT NULL AUTO_INCREMENT,

`a` int unsigned NOT NULL DEFAULT '0',

`b` int unsigned NOT NULL DEFAULT '0',

`c` int unsigned NOT NULL,

`asda` varchar(45) DEFAULT NULL,

PRIMARY KEY (`id`),

KEY `a_b_c_index` (`a`,`b`,`c`)

) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

復制代碼

分別執行下面的sql。

explain SELECT * FROM test.test where a=2 and b=12 and c=12;

復制代碼

根據key_len和key兩個字段發現,該sql用到了索引的全部部分。

explain SELECT * FROM test.test where a=2 and b>12 and c=12;

復制代碼

其中key_len結果是8,說明只用到了,索引的兩個部分,但無法確認是abc中的哪些用到了索引。

explain SELECT * FROM test.test where a=2 and b>12;

復制代碼

其中key_len結果是8,說明a和b都用到了索引。

explain SELECT * FROM test.test where a=2 and c=12;

復制代碼

其中key_len結果是4,發現其中只有一個字段用到了索引。

explain SELECT * FROM test.test where c=12;

復制代碼

這里沒用到索引。

根據以上的結果,可以得到那個面試題的結論。只會用到 a 和 b部分用到了索引。

3. 總結

對于聯合索引最左原則的總結如下:

1.聯合索引的最左側列要在查詢語句中才能用到聯合索引。

2.查詢語句中,存在最左側連續的字段,且不能有范圍查詢的聯合索引部分會生效。

3.最左原則在遇到范圍查詢后,之后往右的字段,索引不生效。

總結

以上是生活随笔為你收集整理的mysql最左_Mysql最左原则的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。