索引是在引擎层而不是服务器层实现的。

B-Tree索引

B-Tree通常意味着所有的值都是按顺序存储的,并且每一个叶子页到根的距离相同。

image.png

B-Tree索引能够加快访问数据的速度,因为存储引擎不再须臾进行全表扫描来获取需要的数据,取而代之的是从索引的根节点开始搜索。

索引对多个值进行排序的依据是create table语句中定义索引时列的顺序 ,两个人的姓和名都一样,则根据他们的出生日期来排列查看。

可以使用B-Tree索引的查询类型,B-Tree索引适用于全键值、键值范围或键前缀查找。其中键前缀查找只适用于根据最左前缀的查找。前面所述的索引对如下类型的查询有效。

全值匹配
全值匹配指的是和索引中的所有列进行匹配。
匹配最左前缀
即只使用索引的第一列
匹配列前缀
也可以只匹配某一列的值的开头部分,例如前面提到的索引可用于查找所有以J开头的姓的人。这里也只使用了索引的第一列
匹配范围值
例如前面提到的索引可用于查找姓在Allen和Barrymore之间的人,这里也只使用了索引的第一列。
精确匹配某一列并范围匹配另外一列
也可用查找所有姓为Allen,并且名字是字母K开头的人,即第一列last_name全匹配,第二列first_name范围匹配。
只访问索引的查询
即查询只需要访问索引,而无需访问数据行。

哈希索引

哈希索引(hash index)基于哈希表实现,只有匹配索引所有列的查询才有效。

空间数据索引(R-Tree)

全文索引

全文索引是一种特殊类型的索引,它查找的是文本中的关键词,而不是直接比较索引中的值。全文索引和其他几类索引的匹配方式完全不一样。
全文索引更类似于搜索引擎做的事儿,而不是简单的where条件匹配。