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