索引是幫助mysql高效獲取資料的排好序的資料結構
例如有如下的表:
如果索引的資料結構是二叉樹的話,索引在col2上,那麼可能是這種情況:
如果索引的資料結構是二叉樹的話,索引在col1上,那麼就是這種情況:
成為了這種線性結構,二叉樹的深度是不可控的,這樣會增加磁碟i/o的次數,降低查詢效率。那麼我們用紅黑樹替代
雖然紅黑樹能夠自動平衡,但是實際上樹的高度還是不能夠控制。這時候就用到了b-tree
類似這種,將節點的容量擴大,從而達到降低樹的深度的目的來減少i/o操作。將節點資料讀取到記憶體中查詢遠比一次i/o的時間少。b-tree的特點就是每層節點數目非常多,層數很少。但是每個節點都是data域(指標)這無疑增大了節點大小,增加了磁碟i/o的時間,那麼接下來就是mysql最終確定的b+tree,b+tree將所有的data都放到了葉子結點上
myisam索引實現,myisam索引檔案和資料檔案是分離的
.frm -->表結構;
.myi-->索引資料;
myd-->資料
innodb索引和資料在一起
.frm-->表結構;
.ibd(index,data)
innodb必須有主鍵,推薦使用整型。如果建表沒有建,mysql也會主動建。
為什麼要用整型?
1、在查詢索引比較大小時,整型要比字串更方便;
2、字串不管是在磁碟中還是記憶體中都要比整型更佔記憶體;
為什麼自增?
好維護索引資料。新增一條資料,如果不是自增會發生裂變
索引資料結構如果採用hash,用hash表儲存索引與資料的對應關係,查詢更快,但是當條件出現範圍,如》用不到索引
如果內容對大家有所幫助,感謝鼓勵!實現我小時候一人給我一塊錢的美夢,哈哈!
資料庫mysql索引 資料庫 mysql索引
mysql 索引 mysql索引的建立對於mysql的高效執行是很重要的,索引可以大大提高mysql的檢索速度。打個比方,如果合理的設計且使用索引的mysql是一輛蘭博基尼的話,那麼沒有設計和使用索引的mysql就是乙個人力三輪車。索引分單列索引和組合索引。單列索引,即乙個索引只包含單個列,乙個表可...
mysql更新索引庫 Mysql資料庫索引增刪改查
一.索引的作用 一般的應用系統,讀寫比例在10 1左右,而且插入操作和一般的更新操作很少出現效能問題,遇到最多的,也是最容易出問題的,還是一些複雜的查詢操作,所以查詢語句的優化顯然是重中之重。在資料量和訪問量不大的情況下,mysql訪問是非常快的,是否加索引對訪問影響不大。但是當資料量和訪問量劇增的...
MySQL資料庫索引
mysql資料庫索引 目錄 1 myisam與innodb的區別 2 索引的優缺點 3 如何選用索引 4 檢視索引 5 雜湊索引 6 b 樹 7 索引分類 1 myisam與innodb的區別 1 show engines 圖1.1 截圖1 a mysql資料表主要支援如圖所示的儲存引擎,分為 事務...