mysql优化3:BTree索引和Hash索引

一、BTree索引

注:名叫btree索引,大的方面看,都用的平衡树,但具体的实现上,各引擎稍有不同,比如,严格地说,NDB引擎使用的是T-tree,Myisam和innodb中默认用B-tree索引。

  抽象来讲,Btree可以理解为“排好序的快速查找结构”。

btree索引的常见误区:

1、在where条件常用的列上都加上独立的索引

  例如 a列上加索引idx_a,b列上加索引idx_b

  where a=3 and b>100 只能用上idx_a或idx_b中的一个,不能同时用上。

二、hash索引

  在memory(内存)表里默认是hash索引,hash索引的理论查询时间复杂度为O(1)

hash索引的缺点:

1、hash函数计算后的结果,是随机的,如果是在磁盘上放置数据,

比如以主键id为例,那么随着id的增长,id对应的行,在磁盘上随机放置。

2、无法对范围查询进行优化。

3、无法利用前缀索引。

4、排序也无法优化。

5、必须回行。通过索引拿到数据位置,必须回到表中取数据。

posted @ 2017-07-29 15:25  hustzzl  阅读(271)  评论(0编辑  收藏  举报