常見的索引模型:
1、雜湊表是一種以鍵 - 值(key-value)儲存資料的結構,我們只要輸入待查詢的鍵即 key,就可以找到其對應的值即 value。雜湊的思路很簡單,把值放在陣列裡,用乙個雜湊函式把 key 換算成乙個確定的位置,然後把 value 放在陣列的這個位置。
雜湊表這種結構適用於只有等值查詢的場景。
2、有序陣列在等值查詢和範圍查詢場景中的效能就都非常優秀。
如果僅僅看查詢效率,有序陣列就是最好的資料結構了。但是,在需要更新資料的時候就麻煩了,你往中間插入乙個記錄就必須得挪動後面所有的記錄,成本太高。所以,有序陣列索引只適用於靜態儲存引擎。
3、二叉搜尋樹的特點是:父節點左子樹所有結點的值小於父節點的值,右子樹所有結點的值大於父節點的值。
多叉樹就是每個節點有多個兒子,兒子之間的大小保證從左到右遞增。二叉樹是搜尋效率最高的,但是實際上大多數的資料庫儲存卻並不使用二叉樹。其原因是,索引不止存在記憶體中,還要寫到磁碟上。
以 innodb 的乙個整數字段索引為例,這個 n 差不多是 1200。這棵樹高是 4 的時候,就可以存 1200 的 3 次方個值,這已經 17 億了。考慮到樹根的資料塊總是在記憶體中的,乙個 10 億行的表上乙個整數字段的索引,查詢乙個值最多隻需要訪問 3 次磁碟。其實,樹的第二層也有很大概率在記憶體中,那麼訪問磁碟的平均次數就更少了。
n 叉樹由於在讀寫上的效能優點,以及適配磁碟的訪問模式,已經被廣泛應用在資料庫引擎中了。
在 innodb 中,表都是根據主鍵順序以索引的形式存放的,這種儲存方式的表稱為索引組織表(所謂的索引組織起錶其實就是clustered index)。
又因為前面我們提到的,innodb 使用了 b+ 樹索引模型,所以資料都是儲存在 b+ 樹中的。
每乙個索引在 innodb 裡面對應一棵 b+ 樹。
mysql> create table t(
id int primary key,
k int not null,
name varchar(16),
index (k))engine=innodb;
索引型別分為主鍵索引和非主鍵索引。
主鍵索引的葉子節點存的是整行資料。在 innodb 裡,主鍵索引也被稱為聚簇索引(clustered index)。
非主鍵索引的葉子節點內容是主鍵的值。在 innodb 裡,非主鍵索引也被稱為二級索引(secondary index)。
由於每個非主鍵索引的葉子節點上都是主鍵的值。顯然,主鍵長度越小,普通索引的葉子節點就越小,普通索引占用的空間也就越小。
自增主鍵: not null primary key auto_increment
增加索引或主鍵:
alter table t add index(k);
alter table t add primary key(id);
mysql中索引的建立原則:
1、覆蓋索引
覆蓋索引直接提供查詢結果,不需要回表。也就是說,在查詢裡面,索引已經「覆蓋了」我們的查詢需求,我們稱為覆蓋索引。
2、最左字首原則
b+ 樹這種索引結構,可以利用索引的「最左字首」,來定位記錄。
3、復合索引的建立原則
第一原則是,如果通過調整順序,可以少維護乙個索引,那麼這個順序往往就是需要優先考慮採用的;
4、索引下推(index condition pushdown)
可以在索引遍歷過程中,對索引中包含的字段先做判斷,直接過濾掉不滿足條件的記錄,減少回表次數。
innodb 在 (name,age) 索引內部就判斷了 age 是否等於 10,對於不等於 10 的記錄,直接判斷並跳過。在我們的這個例子中,只需要對 id4、id5 這兩條記錄回表取資料判斷,就只需要回表 2 次。
MySql 04 筆記 索引
1 為什麼需要索引?索引的出現是為了提高資料查詢的效率 1 雜湊表 雜湊表是一種以鍵 值 key value 儲存資料的結構,只要輸入待查詢的值即key,就可以找到其對應的值即 value。雜湊的思路 把值放在陣列裡,用乙個雜湊函式把key換算成乙個確定的位置,然後把value放在陣列的這個位置 雜...
MYSQL索引 學習筆記
索引分類 索引失效 索引帶來的弊端 幫助mysql進行高效查詢的資料結構 有序 在資料之外,資料庫系統還維護著滿足特定查詢演算法的資料結構,這些資料結構以某種方式引用 指向 資料,這樣就可以在這些資料結構上實現高階查詢演算法,這種資料結構就是索引 換言之,索引就是某種資料結構 如下圖所示 左邊是資料...
mysql索引學習筆記
mysql索引學習筆記 1.索引的優劣 優 加快查詢速率 劣 影響對錶的添刪改操作的速率,增大檔案大小 可能索引檔案比資料檔案還大 所以,在往資料庫匯入大量資料之前,應該先暫時刪除索引,資料匯入完成後再統一建立索引。www.2cto.com 2.建立索引的原則 1 不過度索引 2 索引應該建在需要頻...