91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

凤冈县| 筠连县| 措美县| 城步| 略阳县| 衡阳县| 鲜城| 湖北省| 霍城县| 武陟县| 从江县| 盐山县| 定陶县| 上思县| 禹州市| 荥阳市| 阿鲁科尔沁旗| 芦山县| 桂平市| 平江县| 长葛市| 乌拉特前旗| 广东省| 永丰县| 盐山县| 陆河县| 扶沟县| 鹿泉市| 黄平县| 崇礼县| 潢川县| 张北县| 武夷山市| 贡山| 乌兰察布市| 太原市| 平湖市| 通城县| 盐津县| 习水县| 岚皋县|