在人们谈论索引的时候,如果没有特别指明类型,多半说的就是B树索引,它是使用 B-Tree 数据结构来存储数据。
也有很多存储引擎使用的是B+Tree,例如 InnoDB
例如:
CREATE TABLE People (
last_name varchar(50) not null,
first_name varchar(50) not null,
dob date not null,
gander enum(‘m‘,‘f‘) not null,
key(last_name, first_name, dob)
)
对于表中的每一行数据,索引中包含了 last_name、first_name, 和 dob 列的值。
索引对多个值进行排序的一局是 CREATE TABLE 语句中定义索引时列的顺序。
B-Tree 索引的查询类型:B-Tree 索引适用于全键值、键值范围或键前缀查找。其中键前缀查找只适用于很久最左键前缀的查找。
B-Tree 索引的限制:
哈希索引(hash index)基于哈希表实现,只有精确匹配索引所有列的查询才有效。 对于每一行数据,存储引擎都会对所有的索引列计算一个哈希码,哈希索引将所有的哈希码存储在索引中,同时在哈希表中保存指向每个数据化的指针。
在 MySQL 中,只有 Memory 引擎支持哈希索引。这也是 Memory 引擎的默认索引类型,Memory 引擎同时也支持 B-Tree 索引。
因为哈希索引的限制较多,所以只适用于某些特定的场合。而一旦适合哈希索引,则它带来的性能提升将非常显著。
另外,InnoDB 引擎有一个特殊的功能叫做”自适应哈希索引“。可以适当去了解。
MyISAM 表支持空间索引(R-Tree),可以用作地理数据存储。和 B-Tree 索引不同,这类索引无需前缀查询。空间索引会从所有维度来索引数据。查询时,可以有效地使用任意维度来组合查询。
全文索引是一种特殊类型的索引,它查找的是文本中的关键词,而不是直接比较索引中的值。全文索引和其他几类索引的匹配方式完全不一样。它有许多需要注意的细节,如停用词、词干和复数、布尔搜索等。全文索引更类似于搜索引擎做的事情,而不是简单的 WHERE 条件匹配。
在相同的列上同时创建全文索引和基于值的 B-Tree 索引不会有冲突。
原文:https://www.cnblogs.com/luler/p/14955387.html