百万级数据查询sql调优

产品信息表数据过百万,未来还将继续增长,之前已经做过优化,将查询时间控制在10秒以内,仍然很慢,而且随着数据的增长,查询速度肉眼可见越来越慢。

如何提升查询效率呢?

第一步:定位查询慢的原因

之前已经做过sql调优,数据列表的sql自认已经没有更多优化的地方,所以就从后台代码上看,是否是程序耽误了时间。

详细的梳理了日志之后发现,列表查询时是使用mybatis自动分页功能,而数据总数是直接在数据查询sql外围套上COUNT来查的,就是这么简单粗暴。而数据查询sql自带许多查询条件和各种join,这就导致count时无比的慢。

那么原因就定位出来了,总数count原sql过于粗糙。

第二步:对症下药

后台代码将查总数功能独立出来,count的sql单独写之后,效果立竿见影,立马快了5秒钟

但是,六七秒的查询时间仍然是太慢,毕竟count的总数需要与数据对上,所以一些查询条件与一些join也是必须的,得把这个count的sql优化一下。

怎么优化呢?想到了建索引。

此条sql涉及的主要过滤字段包括厂商id,客户id,产品类型,和修改时间,那么就建立这四个字段的索引。

建好之后再看查询效率,效果甚微,快了1秒。

使用EXPLAIN分析执行计划,发现并没有用到刚建的索引。

强制使用索引(FORCE INDEX(索引名))。

哇!效果喜人,查询时间降低到两秒以内!

至此,此次优化任务圆满完成,特此记录。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值