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、必须回行。通过索引拿到数据位置,必须回到表中取数据。