什麼是索引?
索引是一種能幫助 mysql 提高查詢效率的資料結構。
索引分別有哪些優點和缺點?
索引的優點如下:
索引的缺點:
使用索引注意事項:
索引有幾種型別?分別如何建立?
mysql 的索引有兩種分類方式:邏輯分類和物理分類。 按照邏輯分類,索引可分為:
按照物理分類,索引可分為:
各種索引的建立指令碼如下:
-- 建立主鍵索引
alter
table t add
primary
keyadd
(`id`);
-- 建立唯一索引
alter
table t add
unique
(`username`);
-- 建立普通索引
alter
table t add
index index_name (
`username`);
-- 建立全文索引
alter
table t add fulltext (
`username`
);
主索引和唯一索引有什麼區別?
什麼叫回表查詢?
普通索引查詢到主鍵索引後,回到主鍵索引樹搜尋的過程,我們稱為回表查詢。
mysql>
create
table t(
id int
primary
key,
k int
notnull
, name varchar(16
),index
(k))
engine
=innodb
;
如果語句是 select * from t where id=500,即主鍵查詢方式,則只需要檢索主鍵 id 字段。
mysql>
select
*from t where id=
500;
+-----+---+-------+
| id | k | name |
+-----+---+-------+
|500|5
| name5 |
+-----+---+-------+
如果語句是 select * from t where k=5,即普通索引查詢方式,則需要先搜尋 k 索引樹,得到 id 的值為 500,再到 id 索引樹搜尋一次,這個過程稱為回表查詢。
mysql>
select
*from t where k=5;
+-----+---+-------+
| id | k | name |
+-----+---+-------+
|500|5
| name5 |
+-----+---+-------+
也就是說,基於非主鍵索引的查詢需要多掃瞄一棵索引樹。因此,我們在應用中應該盡量使用主鍵查詢。
索引的常見儲存演算法有哪些?
innodb 為什麼要使用 b+ 樹,而不是 b 樹、hash、紅黑樹或二叉樹?
因為 b 樹、hash、紅黑樹或二叉樹存在以下問題:
為什麼 innodb 要使用 b+ 樹來儲存索引?
b+tree 中的 b 是 balance,是平衡的意思,它在經典 b tree 的基礎上進行了優化,增加了順序訪問指標,在b+tree 的每個葉子節點增加乙個指向相鄰葉子節點的指標,就形成了帶有順序訪問指標的 b+tree,這樣就提高了區間訪問效能:如果要查詢 key 為從 18 到 49 的所有資料記錄,當找到 18 後,只需順著節點和指標順序遍歷就可以一次性訪問到所有資料節點,極大提到了區間查詢效率(無需返回上層父節點重複遍歷查詢減少 io 操作)。
索引本身也很大,不可能全部儲存在記憶體中,因此索引往往以索引檔案的形式儲存的磁碟上,這樣的話,索引查詢過程中就要產生磁碟 io 消耗,相對於記憶體訪問,io 訪問的消耗要高幾個數量級,所以索引的結構組織要盡量減少查詢過程中磁碟 io 的訪問次數,從而提公升索引效率。 綜合所述,inndb 只有採取 b+ 樹的資料結構儲存索引,才能提供資料庫整體的操作效能。
b+樹的特徵:
1.有k個子樹的中間節點包含有k個元素(b樹中是k-1個元素),每個元素不儲存資料,只用來索引,所有資料都儲存在葉子節點。
2.所有的葉子結點中包含了全部元素的資訊,及指向含這些元素記錄的指標,且葉子結點本身依關鍵字的大小自小而大順序鏈結。
3.所有的中間節點元素都同時存在於子節點,在子節點元素中是最大(或最小)元素。
b+樹的優勢:
1.單一節點儲存更多的元素,使得查詢的io次數更少。
2.所有查詢都要查詢到葉子節點,查詢效能穩定。
3.所有葉子節點形成有序鍊錶,便於範圍查詢。
所有的中間節點元素都同時存在於子節點,在子節點元素中是最大(或最小)元素。
常見問題 MySQL 索引
最常用,沒有任何限制。必須唯一,但允許空值,如果是組合索引,列值的組合必須唯一。由於mysql查詢時,只能使用乙個索引,因此建立組合索引在組合查詢的場景下更加有效。組合索引是有順序的,建立乙個組合索引,其實相當於建立了所有該索引包含的字首的索引,舉例說明為,建立組合索引 id,time 相當於分別建...
索引常見問題
全表掃瞄 在資料量大的時候,執行效率很慢。資料量小比較快 索引 只要將關鍵資訊組織起來,根據這些資訊的指引,就可以快速查詢到我們想要的頁面,因此通過索引可以大幅度提公升我們查詢的速度。二 什麼樣的資訊能成為索引 主鍵唯一鍵 普通鍵都可以 三 索引的資料結構 二叉查詢樹 b tree b tree h...
索引之B樹 B 樹 B 樹 B 樹詳解
索引之b樹 b 樹 b 樹 b 樹 b樹 即二叉搜尋樹 1.所有非葉子結點至多擁有兩個兒子 left和right 2.所有結點儲存乙個關鍵字 3.非葉子結點的左指標指向小於其關鍵字的子樹,右指標指向大於其關鍵字的子樹 如 b樹的搜尋,從根結點開始,如果查詢的關鍵字與結點的關鍵字相等,那麼就命中 否則...