结论:在索引字段中使用函数会使索引失效 。
使用索引优化排序
我们有一个订单表T _ order (ID,User _ ID,addtime,Price),经常会查询一个用户的订单,并按照AddTime升序排序 。我们应该如何创建索引?我们来分析一下 。
在user_id上创建索引 。让我们分析一下这种情况和数据检索的过程:
走user_id索引,找到记录的的id通过id在主键索引中回表检索出整条数据重复上面的操作,获取所有目标记录在内存中对目标记录按照addtime进行排序我们要知道,当数据量非常大的时候,排序还是很慢的,可能会用到磁盘上的文件 。有没有一种方法可以很好的查询数据?
我们来复习一下mysql中B树数据的结构 。记录是根据索引值排序的链表 。如果把user_id和addtime放在一起组成一个联合索引(user_id,addtime),通过user_id检索到的数据自然会按照addtime排序,效率更高 。如果需要降序添加时间,只需翻转结果即可 。
【如何正确的使用索引 mysql索引怎么实现】总结一些使用索引的建议 。
在区分度高的字段上面建立索引可以有效的使用索引,区分度太低,无法有效的利用索引,可能需要扫描所有数据页,此时和不使用索引差不多联合索引注意最左匹配原则:必须按照从左到右的顺序匹配,mysql会一直向右匹配直到遇到范围查询(>、 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整查询记录的时候,少使用*,尽量去利用索引覆盖,可以减少回表操作,提升效率有些查询可以采用联合索引,进而使用到索引下推(IPC),也可以减少回表操作,提升效率禁止对索引字段使用函数、运算符操作,会使索引失效字符串字段和数字比较的时候会使索引无效模糊查询'%值%'会使索引无效,变为全表扫描,但是'值%'这种可以有效利用索引排序中尽量使用到索引字段,这样可以减少排序,提升查询效率,
推荐阅读
- 如何设置QQ交友验证问题
- 芥末酱的配方是什么
- 埃菲尔铁塔简笔画
- 义乌有什么好玩的地方
- 对虾和青虾的区别
- 如何设置qq空间全背景的封面
- 桂林有什么好玩的旅游景点
- 长沙有什么好玩的地方
- 如何设置QQ空间说说尾巴
- 汕头有什么好玩的景点
