亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

mysql關于主鍵索引的分析

發布時間:2021-11-18 15:45:03 來源:億速云 閱讀:151 作者:iii 欄目:MySQL數據庫

本篇內容介紹了“mysql關于主鍵索引的分析”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

到底InnoDB會不會在索引末尾加上主鍵,什么時候會加?

CREATE TABLE t ( a char(32) not null primary key, b char(32) not null, KEY idx1 (a,b), KEY idx2 (b,a) ) Engine=InnoDB;

插入部分數據后可以看到idx1和idx2兩個索引的大小相同。這說明idx1和idx2的內部結構是一樣的,因此 不可能 是idx1在內部存為(a,b,a)。

只要用戶定義的索引字段中包含了主鍵中的字段,那么這個字段就不會再被InnoDB自動加到索引中了,如果用戶的索引字段中沒有完全包含主鍵字段,InnoDB就會把剩下的主鍵字段加到索引末尾。

因此我們最初的例子中, idx1 和 idx2 兩個索引內部大小完全一樣,沒有區別。

最后再補充下組合主鍵的例子:

CREATE TABLE t ( a char(32) not null, b char(32) not null, c char(32) not null, d char(32) not null, PRIMARY KEY (a,b) KEY idx1 (c,a), KEY idx2 (d,b) ) Engine=InnoDB;

這個表InnoDB會自動補全主鍵字典,idx1 實際上內部存儲為 (c,a,b),idx2 實際上內部存儲為 (d,b,a)。
但是這個自動添加的字段,Server層是不知道的,所以MySQL優化器并不知道這個字段的存在,所以如果你有一個查詢:

SELECT * FROM t WHERE d=x1 AND b=x2 ORDER BY a;

其實內部存儲的idx2(d,b,a)可以讓這個查詢完全走索引,但是由于Server層不知道,所以最終MySQL優化器可能選擇 idx2(d,b) 做過濾然后排序 a 字段,或者直接用PK掃描避免排序。

而如果我們定義表結構的時候就定義為 KEY idx2(d,b,a) ,那么MySQL就知道(d,b,a)三個字段索引中都有,并且InnoDB發現用戶定義的索引中包含了所有的主鍵字段,也不會再添加了,并沒有增加存儲空間。

因此,由衷的建議,所有的DBA建索引的時候,都在業務要求的索引字段后面補上主鍵字段,這沒有任何損失,但是可能給你帶來意外的驚喜。

“mysql關于主鍵索引的分析”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

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

AI

聂拉木县| 金坛市| 广昌县| 靖边县| 百色市| 石家庄市| 奉贤区| 饶阳县| 鹿泉市| 株洲县| 泾阳县| 浪卡子县| 余庆县| 红桥区| 徐闻县| 遵义市| 岳普湖县| 大洼县| 都昌县| 宁陵县| 渝中区| 安康市| 彭州市| 郯城县| 界首市| 图们市| 古田县| 满洲里市| 睢宁县| 峨山| 水富县| 凤阳县| 文昌市| 双辽市| 中方县| 芜湖市| 碌曲县| 工布江达县| 个旧市| 连云港市| 宜君县|