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