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

溫馨提示×

溫馨提示×

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

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

MySQL InnoDB索引的存儲結構和分類

發布時間:2021-09-16 07:37:28 來源:億速云 閱讀:383 作者:chen 欄目:大數據

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

InnoDB索引的數據結

InnoDB索引采用了B-Tree的數據結構,數據存儲在葉子節點上,每個葉子節點默認的大小是16KB。

當新記錄插入到InnoDB聚簇索引中時,如果按順序插入索引記錄(升序或降序),當達到葉子節點最大的容量時,下一條記錄就會寫到新的的頁中。


葉子節點可使用的容量為總容量的15/16,InnoDB會留1/16的空間,以備將來插入和更新索引記錄時使用, 如果以隨機順序插入記錄,則頁面的容量為1/2到15/16之間。


你可以設置 innodb_page_size 來調整頁的大小,支持 64KB, 32KB, 16KB (默認), 8KB, 和4KB。


索引的分類

InnoDB的索引類型分為主鍵索引和非主鍵索引。


主鍵索引的葉子節點存的是整行數據。在 InnoDB 里,主鍵索引也被稱為聚簇索引(clustered index)。整張表的數據其實就是存儲在聚簇索引中的,聚簇索引就是表。


如果沒有設置主鍵怎么辦呢?MySQL會自動選擇一個可以唯一標識數據記錄的列作為主鍵,如果不存在這種列,則MySQL自動為InnoDB表生成一個隱含字段作為主鍵。


聚簇索引結構如下圖所示:


MySQL InnoDB索引的存儲結構和分類


非主鍵索引的葉子節點內容是主鍵的值。在 InnoDB 里,非主鍵索引也被稱為二級索引(secondary index)。


二級索引的葉子節點中存的是主鍵的值,不是原始的數據,所以二級索引找到主鍵的值之后,需要用該主鍵再去主鍵索引上查找一次,才能獲取到最終的數據,這個過程叫做回表,這也是“二級”的含義。


二級索引結構如下圖所示:

MySQL InnoDB索引的存儲結構和分類


創建索引的建議


由于二級索引中保存了主鍵值,所以索引主鍵值越小越好,以免二級索引占用的空間過大,一般建議使用int的自增列作為主鍵。


這樣可以保證數據行是按順序寫入的,對于根據主鍵做關聯操作的性能也會更好。


因為主鍵是順序的,所以每一條記錄都保存在上一條記錄的后面,當前的頁寫滿的時候,下一條記錄就寫在新的頁中。


這樣在讀取數據的時候,就可以按順序讀取,充分利用了局部性的優勢,大大提高了讀取效率。


自增主鍵新增數據示例:

MySQL InnoDB索引的存儲結構和分類


建議避免使用UUID作為聚簇索引,它使得聚簇索引的插入變得完全隨機,使得數據沒有任何聚集特性。


因為UUID主鍵是隨機生成的,新的主鍵不一定比上一個主鍵大,所以無法每次都把新的主鍵插入到最后面,需要為新的主鍵尋找合適的位置,通常在已有數據的中間位置。


在頁中間插入數據需要重新分配空間,以及移動旁邊的數據,這樣會導致頻繁的頁分裂操作同時會產生碎片。


UUID主鍵新增數據示例:

MySQL InnoDB索引的存儲結構和分類


所以,聚簇索引最好用自增的列,并且要盡可能的小,這樣可以避免二級索引過大。

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

向AI問一下細節

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

AI

徐汇区| 高州市| 墨玉县| 滨州市| 莎车县| 高碑店市| 龙山县| 原阳县| 高安市| 望江县| 呼和浩特市| 霸州市| 丹棱县| 丽水市| 察隅县| 寿宁县| 英吉沙县| 章丘市| 城步| 浦城县| 阿坝县| 汕尾市| 纳雍县| 尚志市| 松阳县| 吉林省| 永泰县| 绍兴县| 潍坊市| 呼玛县| 德惠市| 绥棱县| 敖汉旗| 元江| 新平| 资阳市| 武穴市| 安徽省| 游戏| 汉阴县| 囊谦县|