索引类型
b-tree索引和hash索引
1.hash索引(存在内存中)
在memory表默认是hash索引的理论查询时间复杂度为O(1)
疑问:既然hash的查找如此高效,为什么不用hash索引
答:
1).hash函数计算后的结果,是随机的,结果是在磁盘上随机放置
2).无法对范围查询进行优化
3).无法利用前缀索引,比如在btree中,比如查询helloword的hello前缀就无法用左前缀索引
4).排序无法优化
5).通过索引拿到数据的位置,必须回到数据表拿数据
2.myisam,innodb中默认用b-tree索引
b-tree系统,可理解为’排序好的快速查询结构’
b-tree索引误区
在where常用的列上都加索引
例如where category=1 and price>100 //查询第一个栏目价格100元以上的
误区: category和price都加上索引, 只能在category和price其中一个索引,因为是独立索引,同时只能用1个。
实际上更多使用联合索引
联合索引需符合左前缀原则
以index(a,b,c)为例(注意和顺序有关)联合索引遵循左前缀原则,只有左边的索引发挥了作用,其后的索引才有效
以下表格为例
网友评论