业务优化案例一则

栏目: 数据库 · 发布时间: 7年前

内容简介:本文讲述调整sql逻辑达到优化目的案例前面一篇文章说过在有赞的数据库运维体系里面,每个实例会部署相应的sql-killer工具,实时处理耗时比较长的查询。 业务方报执行某个功能时,系统报错

业务优化案例一则

本文讲述调整 sql 逻辑达到优化目的案例

一前言

前面一篇文章说过在有赞的数据库运维体系里面,每个实例会部署相应的sql-killer工具,实时处理耗时比较长的查询。 业务方报执行某个功能时,系统报错 Query execution was interrupted ,显然sql被kill了。和开发沟通业务逻辑如下:

系统会获取满足参加特定活动且满足一定次数的商家,然后做其他相关操作。

二 分析

前文< 业务优化案例一则 >分析过sql变慢的原因大概有如下几种: 

  1. sql 语句本身索引不合理,导致执行缓慢。

  2. 使用合理的索引但是获取的数据量非常多,依然会慢查。

  3. 网络丢包重传导致sql变慢,被kill。

  4. 并发比较高的场景,请求排队处理,等待时间长。

进过排查排除3,4两个因素。我们查看sql

 SELECT count(*) = 7 has_match,t_id
  FROM xxx
  where status = 1
  and task_id in (301, 302, 305, 306, 307, 308, 309) and t_id > 2019
  group by t_id order by t_id desc limit 10000

该sql的功能是获取t_id大于某些值的所有记录并且做聚合,然后把参加过task_id且次数等于7的t_id取出来。拿到sql,然后去查看表结构只有task_id 一个索引。和明显慢查的一个原因是没有合理的索引。

三 优化 

首先根据sql的where条件我们可以针对该sql加上索引 

KEY `idx_taskid_st_tid` (`task_id`,`status`,`t_id`) 

其次 原sql是将所有的记录取出来,通过count(*) = 7 表达式判断是否为1,再拿到程序中处理has_match为1的t_id。针对此我们可以利用 having 函数计算满足条件的记录。优化后的结果如下:

SELECT t_id,count(*) as num
FROM xxx
where status = 1
AND task_id IN (301,302,305,306,307,308,309)
group by t_id  having num=7;

优化之前 

业务优化案例一则

优化之后

业务优化案例一则

四 总结

这个案例相对比较简单,拓展一下数据库优化的核心思想:  三减少,一增加 

业务优化案例一则

——The  End——

业务优化案例一则


以上所述就是小编给大家介绍的《业务优化案例一则》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

长尾理论

长尾理论

[美]克里斯•安德森 (Chris Anderson) / 乔江涛、石晓燕 / 中信出版社 / 2012 / 68.00元

网络经济正如火如荼地发展着,长尾理论无疑成为当代商务人士最为关注的焦点之一。不论是关于长尾理论的溢美还是论战,都代表了其备受关注的程度。 《长尾理论》是克里斯•安德森对这些争论的最明确的回答。在书中,他详细阐释了长尾的精华所在,指出商业和文化的未来不在于传统需求曲线上那个代表“畅销商品”的头部,而是那条代表“冷门商品”的经常被人遗忘的长尾。他还揭示了长尾现象是如何从工业资本主义原动力——规模......一起来看看 《长尾理论》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具