中两个查询结果相减_一次对group by时间导致的慢查询的优化

d35343ce71481a2a96b275349169103c.png

前言:

最近在测试环境中点击一个图表展示页面时,半天才得到后台响应的数据进行页面渲染展示,后台的响应很慢,这样极大的降低了用户的体验;

发现这个问题后马上进行了排查 ,通过排查发现是由一个查询很慢的 「group by」 语句导致的;

「本文主线:」

①、简单描述下排查步骤;

②、对 group by 查询慢进行优化;

简单描述下排查步骤:

排查主要分为了两个步骤:

  • 后台接口的监控,看看哪个方法调用时耗时多
  • 数据库开启慢查询日志,记录执行很慢的SQL

推荐使用阿里开源的Java线上诊断工具 「Arthas」  ,使用其 「trace」 命令统计方法调用链路上各个方法节点的耗时;

Arthas 工具的具体使用方法可参考:线上服务响应时间太长的排查心路  ;

通过使用Arthas工具统计到一个进行数据库的 「group by查询」 方法耗时很严重;

为了进一步确定是这个查询SQL 很耗时,将MySql 的慢查询日志开启了,然后再次调用后台这个接口,发现慢查询日志中确实存在了这个SQL语句;

「SQL语句如下:」

SELECT
 date_format(createts, '%Y') AS YEAR
FROM
 t_test_log
GROUP BY
 date_format(createts, '%Y')
ORDER BY
 createts DESC

这个SQL语句是用来统计表中所有数据被创建时的年份;

下面就来聊聊这个SQL为什么会比较慢,然后进行了怎样的优化;

对 group by 查询慢进行优化:

在优化group by查询的时候,一般会想到下面这两个名词,通过下面这两种索引扫描可以高效快速的完成group by操作:

  • 松散索引扫描(Loose Index Scan)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值