MySQL百万级数据表or查询优化

MySQL百万级数据表or查询优化,第1张

目前公司的订单表有100多万条,使用订单号查询数据时,所需时间大多要10-30秒不等,查看了慢查询日志,发现有的订单查询竟然耗时65秒

我查看了原有的查询语句,发现where后面跟了or查询,虽然3个or都索引,使用explain分析查询结果,发现要扫描近70万行,几乎是全盘扫描一遍,只为获取最多3条数据,效率实在是低下

这3个字段均设置了索引,但or在这个语句中,使索引失效了(主要看最后几行)

使用union all代替or查询,也就是说把3个字段的查询分别做查询,将结果使用union all连接在一起,这样单次查询可以用到索引,效率大大提高

先看一下分析结果

简要的sql语句,查询结果不超80ms

是的

但是使用索引在某些情况下可以避免的:

1、where 语句里面如果带有or条件, myisam表能用到索引, innodb不行。

2、必须所有的or条件都必须是独立索引

3、用UNION替换OR (适用于索引列)

4、用in来替换or

关于mysql处理百万级以上的数据时如何提高其查询速度的方法 最近一段时间由于工作需要,开始关注针对Mysql数据库的select查询语句的相关优化方法。 由于在参与的实际项目中发现当mysql表的数据量达到百万级时,普通SQL查询效率呈直线下降


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7416961.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-05
下一篇 2023-04-05

发表评论

登录后才能评论

评论列表(0条)

保存