1:索引类型
1.1B-tree索引
注:名叫btree索引,大的方面看,都用的平衡树,但具体的实现上,个引擎稍 有不同,比如,严格的说,NDB引擎,使用的是T-tree索引
myisam mnodb中默认使用B-tree索引; 但抽象一下 b_tree系统,可理解为为‘排好序的快速查找结构’
1.2hash索引
在memory(内存)表里,默认是hash索引,hash的理论查询时间复杂度为1(1)
疑问:jiran hash的查找如此高效,为什么不都用hash索引?
答:
1:hsah函数计算后的机构是随机的,如果是在磁盘上放置的数据,比如主键为Id为例
,那么随着id的增长,id对应的行,在磁盘上随机放置。
2:无法对范围查询进行优化
3:无法利用前缀索引,比如 在tree中,field列的值‘helloworld’,并添加索引
,查询 xx=helloworld自然可以利用索引,xx-hello,也可以利用索引
(左前缀索引),因为hash(‘helloword’)和hash(‘hello’),两张关系仍未随机
4:排序呢也无法优化
5:必须换行,也就是说,通过索引拿到数据位置,必须到表中取数据
2:btree索引的常见误区
2.1 在where 条件常用的列上都添加索引
例:where cat_id=3 and price>100;//查询第三个栏目,100元以上的商品
误:cat_id和price上都加上索引
错:只能用上cat_id或price索引,因为是独立的索引,同事只能用上一个
2.2 复合索引遵循最佳左前缀原则
最左前缀:顾名思义,就是最左优先,例如中我们创建了lname_fname_age多列索引,相当于创建了(lname)单列索引,(lname,fname)组合索引以及(lname,fname,age)组合索引。
参考:http://www.cnblogs.com/jamesbd/p/4333901.html