mysql使用中,當業務量過大,通常會通過建立索引增加效率。
兩種索引:
索引其實是一種資料結構,在mysql中主要有兩種:
hash索引和b+ tree 索引。
兩者中hash索引是無序的,不支援範圍查詢,只適合等值查詢。
b+ 樹是一種多路平衡查詢樹,所以他的節點是有序的
(左子節點小於父節點、父節點小於右子節點),
所以對於範圍查詢的時候不需要做全表掃瞄。
兩種儲存引擎:
myisam儲存引擎:索引檔案和資料檔案是分離的,.frm是存放表
結構資料,myd是表資料。myi是存放索引,索引樹上會儲存資料
在myd檔案裡面的位置。
結構資料,.ibd存放的資料和索引。表資料檔案本身就是按b+樹
組織的乙個索引結構檔案主鍵索引葉節點包含了完整的資料記錄
聚集索引與非聚集索引:
索引b+ tree的葉子節點儲存整行資料的是主鍵索引,
也被稱之為聚簇索引。
而索引b+ tree的葉子節點儲存了主鍵的值的是非主鍵索引,
也被稱之為非聚簇索引
索引建立規則:
當建立聯合索引時,一般將使用查詢條件多的字段放在前面。
因為mysql索引查詢會遵循最左字首匹配的原則,即最左優先,
在檢索資料時從聯合索引的最左邊開始匹配。所以當我們建立
乙個聯合索引的時候,如(key1,key2,key3),相當於建立了
(key1)、(key1,key2)和(key1,key2,key3)三個索引,
這就是最左匹配原則
b+ 樹的資料結構:
大致上就是這樣,三層mysql就可以儲存千萬資料。
除了葉子節點都只訪問索引的值,葉子節點儲存索引
和主鍵值(主鍵值+資料)
常見問題:
為什麼推薦innodb表必須有主鍵?
保證會有主鍵索引樹的存在(因為資料存放在主鍵索引樹上面),
如果沒有mysql會自己生成乙個rowid作為自增的主鍵主鍵索引
為什麼推薦使用整型的自增主鍵?
一是方便查詢比較,而是新增資料的時候只需要在最後加入,
不會大規模調整樹結構,如果是uuid的話,大小不好比較,
新增的時候也極有可能在中間插入資料,會導致樹結構大規調整,
造成插入資料變慢。
mysql 資料結構 Mysql索引資料結構
mysql索引資料結構 當慢查詢時,看sql是否走索引。索引的本質 索引是幫助mysql高效獲取資料的排好序的資料結構。mysql若不建立索引,查詢某條資料時則會逐行掃瞄,每掃瞄一行資料就會做一次磁碟io。b tree 葉節點具有相同的深度,葉節點的指標為空。所有索引元素不重複。葉節點中的資料索引從...
mysql索引資料結構 mysql索引資料結構
什麼是索引?索引就是排好序的資料結構,可以幫助我們快速的查詢到資料 幾種資料結構 二叉樹 如果資料是單邊增長的情況 那麼出現的就是和鍊錶一樣的資料結構了,樹高度大 紅黑樹 在二叉樹的基礎上多了樹平衡,也叫二叉平衡樹,不像二叉樹那樣極端的情況會往乙個方向發展。同樣我們查詢6,在二叉樹中我們需要經過6個...
MySQL索引資料結構
mysql官方對索引的定義為 索引 index 是幫助mysql高效獲取資料的資料結構。句子主幹就是索引是資料結構。資料庫查詢是資料庫的主要功能,我們都希望查詢資料的速度盡可能快,因此資料庫系統設計會從查詢的優化的角度進行優化。最基本的查詢演算法就是順序查詢,但這種複雜度為o n 查詢在資料量大的時...