mysql優化一般優化都會先加索引,那麼索引到底是什麼?
索引是幫助MySql高效獲取資料的排好序
的資料結構
;
資料結構分為:
二叉樹
紅黑樹
Hash表
B-Tree
- 二叉樹
二叉樹的資料結構為:
左邊為資料存放的磁碟檔案位置,右側為二叉樹的資料結構;二叉樹的結構都是分叉時候左邊下於當前數,右邊大於當前數;
這時候按照二叉樹結構我們只需要查詢三次就能找到資料存放磁碟的地方但是當我們建立一個二叉樹的資料數為:
這樣遞增的時候,查詢一條資料:
select * form where Col1=6
這時候二叉樹需要從上往下查詢到6次,明顯這時候建立了索引和沒有索引是一樣的;所以二叉樹在遞增下變成了鏈條模式將無用了;
- 紅黑樹
紅黑樹又名:平衡二叉樹;所謂平衡二叉樹就是如圖所示他的資料結構會平衡,不會產生單鏈條模式;
當使用紅黑樹我們建立資料為:
select * form where Col1=6
這時候只需要3次就能查到位置;
紅黑樹明顯二叉樹查詢要快,但是當資料量達到百萬千萬級別紅黑樹就很高,所以早期的資料庫使用的紅黑樹結構現在都不是使用紅黑樹;
- B-Tree
mysql使用的是這種資料結構:
每層索引都有關聯關係,那麼這種的儲存好處是橫向儲存的資料越多,儲存的樹結構越小;
新版的資料結構為 B+Tree
B+Tree實際就是B-Tree的一種優化變種;B+Tree的區別為:1,他的所有儲存都把索引放到了葉子的節點;2:把所有的資料結構都摞移到葉子結點,這樣讓跟結點只存放大的節點,讓儲存根莖部分儲存量更小,可以存放更多的索引;3,葉子結點的索引左右都有聯動性,提高區間訪問的效能;
- Hash表
也稱為雜湊表 由直接定址表改進而來.先看直接定址表 當關鍵字的全域U比較小時,直接定址是一種簡單而有效的技術,直接定址存在一個很明顯的問題。如果域U很大,在一臺典型計算機的可用容量的限制下,要在機器中儲存大小為U的一張表T就有點不太實際,甚至不太可能。如果實際要儲存的關鍵字集合K相對U來說很小,那麼分配給T的大部分空間都要浪費掉
以上測試資料結構都可以去國外一所大學網站上自己測試:
www.cs.usfca.edu/~galles/visualiza...
本次先介紹這麼多,本來準備下篇講解mysql軍規但是 @guoke0826 這位大佬講了,可以去看看:分享:MySQL 規約(轉自阿里巴巴 Java 開發手冊)
本作品採用《CC 協議》,轉載必須註明作者和本文連結