《阿裏p7經驗分享!這些Mysql索引底層知識進大廠是你必須要吃透的》 IT界的奮鬥者今天我們從最基礎的方面來聊聊MySQL索引,我相信應該有不少小夥伴都掌握了基本的數據庫操作,增(insert)刪(delete)查(select)改(update)。如果學得更深入的話,對於數據庫的複雜查詢SQL語句也有所了解,索引的概念因此略知一二,因為我們平時做的項目相對較小,比如就簡單的一個Web系統。數據庫中的數據也不多,所以會感覺索引是否使用的效果差別不大,最多就是在一個表中定義了主鍵(Primary Key)。但是對於大型在線系統來說,數據庫中的數據量億萬級別以上,索引對數據庫查詢的效率就很重要了,這明顯是關乎用戶體驗的事情。所以,來認識一下MySQL索引,為之後遇到優化SQL查詢打基礎!MySQL索引是什麼?它是存儲引擎用來快速找到目標記錄的一種數據結構。它的工作原理就像,我們去看一本書,會先看目錄(索引)部分,然後看到感興趣的章節就根據頁碼翻看。在MySQL中,存儲引擎(MylSAM、InnoDB等)使用索引,就會先在索引中找到對應值,然後根據匹配到的索引回表去找數據行。MySQL有哪些索引,使用索引有什麼優勢呢?索引類型:MySQL中的索引類型有很多,比如B+樹索引、哈希索引、聚簇索引、覆蓋索引,這幾個比較常見而且使用較多的,還有空間數據索引、全文索引等。索引的優點:索引可以讓存儲引擎快速定位到表中的指定位置,當然還有其他索引的功能。簡單概況有這幾個優點:1.大幅度減少服務器需要掃描的數據量。2.可以幫助服務器避免排序和臨時表。3.將隨機IO編成順序IO。B+ Tree 索引B+ Tree數據結構:最常見的B+樹索引,按照順序存儲數據,在MySQL中可以用作order by和group by的操作實現。B+ Tree的數據結構大家應該有所了解,B+ Tree中,非葉子結點結構: 所有葉子節點(存放數據)之間是一種鏈式結構。 高性能MySQL書中給出,B+樹存儲數據的結構如圖: B+ Tree索引特點:B+樹適用於全鍵值、鍵值範圍和鍵前綴查找(最左前綴)。特點:葉子到根結點距離相等,索引樹是有序的。限制: 實驗案例舉個例子,現在有一張表,各個字段如下: 增加幾條記錄: 索引包括了id、username、password三個列,存儲在B+樹結構中,會先按照三個字段依次進行排序,我們嘗試查詢,並查看執行計劃。 根據前面查詢是否走索引的特點,可以看到如果從左到右是會使用索引的。接下來測試無法使用索引的情況 哈希索引哈希索引數據結構:【哈希索引】:基於哈希表的數據結構實現的,需要精確匹配索引所有列的查詢才有效,存儲引擎會對每一行數據的每一列計算一個哈希碼。解決哈希沖突:如果多個列的哈希值相同,索引會以鏈表的方式存放多個記錄指針到同一個哈希條目。索引只需存儲對應的哈希值,其結構十分緊湊,查找速度快。實驗測試:創建測試哈希索引的表,在name字段加上哈希索引。 也可以自定義哈希索引,下面我們使用CRC32作為哈希函數,創建偽哈希索引,進行一個簡單的試驗測試:創建觸發器,當有數據插入或者更新時,自動計算哈希碼存放到crc字段: 首先需要將分隔符定義為其他符號,這樣才能在創建觸發器時使用分號。 插入記錄: 可以發現觸發器維護了每一行的哈希值。 更新記錄: id為2的記錄哈希碼也會重新計算。 哈希索引的特點 五、聚簇索引【聚簇索引】:實際是一種數據存儲方式。聚簇:表示數據行和相鄰的鍵值緊湊地存儲在一起。InnoDB的聚簇索引是在同一結構中保存了B-Tree索引和數據行。一個表只能有一個聚簇索引。聚簇索引優點 缺點 覆蓋索引【覆蓋索引】:如果一個索引包含(覆蓋)所有需要查詢的字段的值,這個索引稱為覆蓋索引。Mysql只能使用B-Tree做覆蓋索引。索引可以用來提高查詢效率,那如果能夠直接通過索引獲取數據,就不用回表查詢,更加高效。因此覆蓋索引就提供了這樣的性能。覆蓋索引的好處: 發現索引的知識點真的很多,而且理解難度不斷增加,如果你能夠堅持讀到這裏,說明你很認真,我相信至少掌握了2/3的內容。喜歡就一鍵三連吧,更多資料可以私信回複獲取! 《阿裏p7經驗分享!這些Mysql索引底層知識進大廠是你必須要吃透的》完,請繼續朗讀精采文章。 喜歡 小編的世界 e4to.com,請記得按讚、收藏及分享!
音調
速度
音量
語言
阿裏p7經驗分享!這些Mysql索引底層知識進大廠是你必須要吃透的
精確朗讀模式適合大多數瀏覽器,也相容於桌上型與行動裝置。
不過,使用Chorme瀏覽器仍存在一些問題,不建議使用Chorme瀏覽器進行精確朗讀。