一、索引类型
B-Tree索引:
B-Tree通常间意味着以后有的值都是按顺序存储的,并且每一个叶子页到根的距离相同。
B-Tree索引 列是顺序组织存储的,所以很适合查找 范围数据。
B-Tree索引对如下类型的查询有效:
全值匹配、匹配最左前缀、匹配列前缀、匹配范围值、精确匹配某一列并范围匹配别外一列、只访问索引的查询
B-Tree索引的限制:
如果不是按照索引的最左列开始查找,刚无法使用索引。
不能跳过索引中的列。
如果查询中某个列的范围查询,刚其右边所有列都无法使用索引优化查询。
HASH索引:
哈希索引基于哈希表实现,只有精确匹配索引所有列的查询才有效。
在MySQL中,只有Memory引擎显式支持哈希索引。这也是Memore 引擎表默认索引类型,Memore引擎同时也支持B-Tree索引。
HASH索引的限制:
哈希索引只包含哈希值和行指针,而不存储字段值,所以不能使用索引 中的值来避免读取行。
不过,访问内存中行的速度很快,所以大部分情况下这一点对性能的影响并不明显。
哈希索引并不是按照索引 值顺序存储的,所以也就无法用于排序。
哈希索引 也不支持部分索引列匹配查找,因为哈希索引始终是使用索引列的全部内空来计算哈希值的。如果在 列(a,a2)
上建立了索引,如果查询只有列a 刚无法使用该索引 。
哈希索引只支持等值比较查询。