索引在什么層面?
首先,索引是在存儲(chǔ)引擎層實(shí)現(xiàn)的,而不是在服務(wù)器層實(shí)現(xiàn)的,所以不同存儲(chǔ)引擎具有不同的索引類(lèi)型和實(shí)現(xiàn)。
有哪些?
B+Tree 索引
是大多數(shù) MySQL 存儲(chǔ)引擎的默認(rèn)索引類(lèi)型。
哈希索引
哈希索引能以 O(1) 時(shí)間進(jìn)行查找,但是失去了有序性;
InnoDB 存儲(chǔ)引擎有一個(gè)特殊的功能叫“自適應(yīng)哈希索引”,當(dāng)某個(gè)索引值被使用的非常頻繁時(shí),會(huì)在 B+Tree 索引之上再創(chuàng)建一個(gè)哈希索引,這樣就讓 B+Tree 索引具有哈希索引的一些優(yōu)點(diǎn),比如快速的哈希查找。
全文索引
MyISAM 存儲(chǔ)引擎支持全文索引,用于查找文本中的關(guān)鍵詞,而不是直接比較是否相等。查找條件使用 MATCH AGAINST,而不是普通的 WHERE。
全文索引一般使用倒排索引實(shí)現(xiàn),它記錄著關(guān)鍵詞到其所在文檔的映射。
InnoDB 存儲(chǔ)引擎在 MySQL 5.6.4 版本中也開(kāi)始支持全文索引。
空間數(shù)據(jù)索引
MyISAM 存儲(chǔ)引擎支持空間數(shù)據(jù)索引(R-Tree),可以用于地理數(shù)據(jù)存儲(chǔ)。空間數(shù)據(jù)索引會(huì)從所有維度來(lái)索引數(shù)據(jù),可以有效地使用任意維度來(lái)進(jìn)行組合查詢(xún)。