记一次生产数据库sql优化案例--23秒优化到0.9秒-天下标王
数据库 MySQL
新项目业务人员反馈说最近订单发放模块经常很卡,导致总是有锁的情况发生,在用慢查询和开启锁监控观察后发现实际上只是单条查询慢造成的阻塞锁,这里考虑先对单条查询做一下优化。

新项目业务人员反馈说最近订单发放模块经常很卡,导致总是有锁的情况发生,在用慢查询和开启锁监控观察后发现实际上只是单条查询慢造成的阻塞锁,这里考虑先对单条查询做一下优化。

一、优化前的表结构、数据量、SQL、执行计划、执行时间

1. 表结构

A表有90个字段,B表有140个字段。

记一次生产数据库sql优化案例--23秒优化到0.9秒

2. 数据量

  1. select count(*) from A; 
  2. --166713 
  3. select count(*) from B; 
  4. --220810 

3. sql

开启慢查询观察到慢sql如下,单条执行只取200条记录是在23秒左右。

  1. select ob.id, ob.customer, ob.order_no1, ob.accountingitems_code, ob.insert_date, ob.weight,  
  2. ob.volume, ob.qty, ob.project_code,ob.order_no2,ob.order_type1  
  3.  from A as ob  
  4. where ifnull(ob.project_code,'')<>'' and ifnull(ob.accountingitems_code,'')<>''  
  5. and ob.if_cost_proof='N'  
  6. and EXISTS (select 1 from B ol where ob.id=ol.order_base) limit 200; 

记一次生产数据库sql优化案例--23秒优化到0.9秒

记一次生产数据库sql优化案例--23秒优化到0.9秒

4. 执行计划

记一次生产数据库sql优化案例--23秒优化到0.9秒

思路

这两张表都是订单表,全国各地的每天大概会产生十万行左右,这里又是全扫,等后期达到上千万的数据就GG了。目前只是看到这个sql上的问题,先考虑exists部分做一下改写。

二、exists部分改写

  1. select ob.id, ob.customer, ob.order_no1, ob.accountingitems_code, ob.insert_date, ob.weight,  
  2. ob.volume, ob.qty, ob.project_code,ob.order_no2,ob.order_type1  
  3.  from fsl_order_base as ob,fsl_order_base_line ol 
  4. where ob.id=ol.order_base and ob.if_cost_proof='N' and 
  5. ifnull(ob.project_code,'')<>'' and ifnull(ob.accountingitems_code,'')<>'' limit 200; 

执行时间:耗时1.8秒

记一次生产数据库sql优化案例--23秒优化到0.9秒

对应的执行计划:

可以看到ob表走了主键索引

记一次生产数据库sql优化案例--23秒优化到0.9秒

业务确认结果符合需求,那就在这基础上建一下索引吧!

三、ol表建索引

  1. create index idx_obl_id on fsl_order_base_line(order_base); 
  2. create index idx_ob_id_cost on fsl_order_base(id,if_cost_proof); 

加上去但实际上用不到这个索引,选择去掉

记一次生产数据库sql优化案例--23秒优化到0.9秒

四、查看执行时间和执行计划

耗时1.1秒,可惜执行计划还是走了全扫,在对ob表建了索引实际上也用不到,最终只在ol表建了索引。

记一次生产数据库sql优化案例--23秒优化到0.9秒

记一次生产数据库sql优化案例--23秒优化到0.9秒

五、考虑用join改写

把ob结果集缩小,然后再做关联查,并测试是否可以用上索引。

  1. SELECT 
  2.  obc.id, 
  3.  obc.customer, 
  4.  obc.order_no1, 
  5.  obc.accountingitems_code, 
  6.  obc.insert_date, 
  7.  obc.weight, 
  8.  obc.volume, 
  9.  obc.qty, 
  10.  obc.project_code, 
  11.  obc.order_no2, 
  12.  obc.order_type1  
  13. FROM 
  14.  (select * from fsl_order_base AS ob where ob.if_cost_proof = 'N' and ifnull( ob.project_code, '' ) <> '' and ifnull( ob.accountingitems_code, '' ) <> '' ) obc 
  15.  join 
  16.  fsl_order_base_line ol  
  17.  on obc.id = ol.order_base limit 200; 

时间快了一点,但不是很明显,先凑合吧

记一次生产数据库sql优化案例--23秒优化到0.9秒

执行计划保持不变。

记一次生产数据库sql优化案例--23秒优化到0.9秒

总结

建索引前因为走了主键索引,所以时间在1.6秒这样,建索引后不走主键索引了,走ol表的索引,所以在1.5秒,然后缩小结果集去查的话就在1s这样。

更重要的是这两个表一个90个字段,一个150个字段,所以这两个表的关联查后期结果集应该还是会很大,建议是弄成分区表的形式,表能拆分的话是最好的。这些长度不要直接给那么大,这么宽对性能都是有影响的。

记一次生产数据库sql优化案例--23秒优化到0.9秒

责任编辑:赵宁宁 来源: 今日头条
相关推荐

2019-08-19 01:34:38

数据库SQL数据库优化

2021-08-26 22:26:55

性能优化技术

2019-12-16 07:18:42

数据库SQL代码

2018-12-06 16:25:39

数据库服务器线程池

2019-11-18 13:42:55

MySQL数据库迁移

2019-01-21 11:17:13

CPU优化定位

2019-11-22 08:05:01

数据库mysql分区

2019-12-12 10:38:10

mysql数据库nnodb

2021-10-14 10:53:20

数据库查询超时

2019-08-15 11:30:06

SQL数据库ASH

2019-07-25 08:30:58

数据库服务器故障

2019-09-05 09:17:37

MySQL数据库线程

2019-09-08 17:52:10

数据库log file sy等待事件

2019-12-02 08:09:57

境数据库连接超时自动回收

2021-03-01 06:14:50

环境高并发延迟

2023-11-29 12:12:24

Oceanbase数据库

2019-04-04 15:00:40

SQL索引数据库

2018-07-18 15:37:24

数据库DB2故障处理

2021-07-30 07:28:16

SQL优化日志

2020-09-25 07:57:42

生产事故系统
Oracle
2723内容
全部话题

同话题下的热门内容

解读 MySQL Explain 关键字:优化查询执行计划的实用指南MySQL redo log 的深度解析探索 MySQL Binlog 的奥秘与应用聊一个 MySQL 插入死锁问题MySQL 索引进阶指南:深入探秘关键知识点五分钟带你掌握 MySQL 读写分离

相关专题 更多

2024年第十九届中国企业年终评选榜单揭晓
2024年第十九届中国企业年终评选榜单揭晓
如何发挥数据的最大力量?
如何发挥数据的最大力量?
2024-09-11 10:06:01
戴尔与AMD携手发布新一代服务器解决方案
戴尔与AMD携手发布新一代服务器解决方案
2024-12-24 16:34:07
我收藏的内容
点赞
收藏
分享

51CTO技术栈公众号

业务
速览
在线客服
媒体
51CTO CIOAge HC3i
社区
51CTO博客 鸿蒙开发者社区 AI.x社区
教育
51CTO学堂 精培 企业培训 CTO训练营

相关内容推荐

莱芜原创网站优化平台网站优化分析技巧单页网站能优化首页吗东莞新媒体网站优化怎么做包年网站优化怎么样泰兴网站自然优化排名唐山优化网站哪家靠谱金融网站优化推荐江夏区网站只能优化滨江区网站优化报价济南正规的网站seo优化网站儋州商城网站优化网站优化都需要什么软件信息类网站优化计划漯河网站推广优化濮阳网站优化定制商洛网站权重优化网站优化说seo网站优化课怎样免费网站优化营销洛阳百度网站优化张掖网站优化推广公司排名宁德网站seo优化定制莱州智能营销网站优化首页网站关键词优化排名杨浦区企业网站优化费用昭化区网站seo优化排名建湖做网站优化的公司盘锦优化网站关键词网站后台seo优化如何做网站排名优化可以实现哪些好处怎么免费做网站的排名和优化郑州新站seo网站优化推广银行网站优化宣传途牛网站性能优化策略分析韶关网站排名优化软件江苏如何优化网站河南网站seo优化在线咨询来安网站优化成都正规的网站seo站内优化南宁网站优化推广公司哪家好越秀网站优化费用防城港做网站优化怎样让网站优化的方式商丘seo网站优化推荐网站排名优化公司哪龙海市网站seo优化排名效果好的seo网站优化网站整站优化别错过易速达网站针对搜索引擎如何优化哈尔滨网站优化推广公司兰州网站排名优化多少钱一个月网站如何优化需要哪些怎么做网站优化排名到前面广州网站优化体验网站优化和不好做有什么区别三只松鼠网站关键词的优化天津网站排名优化效果哪家好建筑网站关键词优化景德镇网站关键词排名优化益阳网站排名优化价格网站长尾关键词优化前景优化企业网站首选大将军22怀化网站优化哪里有牙科医院网站优化方案郑州有实力的网站设计优化徐汇网站优化有哪些德化县网站优化推广青州网站优化推广武昌公司网站排名优化湖南省网站怎么优化排名兰州靠谱优化网站方案拉趣网站优化策划书1000字乐陵网站优化在线咨询栖霞网站优化效果乱用网站优化手段被降权北仑网站优化网站卡顿怎么优化企业网站排名优化推举火31星射阳网站排名优化北京网站优化项目放心的网站推广优化热线莲花全国网站优化石家庄百度网站优化价格石河子网站优化铜陵网站排名优化营销网站中的视频优化湛江网站优化关键词排名海阳网站优化外包有口碑的网站优化排名网站制作优化官网济南企业网站关键词优化公司亦庄网站推广优化报价福田高端网站优化费用多少项城网站自然优化哪里好网站优化方案的预期效果怎么写网站图片慢优化海兴网站优化排名软件东莞网站优化收费网站优化收录平台哪个好金华seo网站优化什么价位揭阳网站优化首页西昌百度网站优化唐山网站优化哪家专业优化网站方法略云速捷声名网站优化专业定制江阴网站排名优化软件公司如何做好企业网站优化思维网站如何优化上词网站排名优化酷风网站排名优化很好火26星至甘肃网站关键词排名优化推荐清水河公司网站优化临城seo网站优化伦敦网站优化推荐靠谱的网站优化什么价格延庆网站优化价格云安百度网站优化深圳官方网站优化有用吗seo站长工具怎么看网站优化网站关键词优化地区秀山网站优化公司做优化需要网站后台吗南通网站优化驭明台州高端网站设计优化建站优化网站优秀易速达长沙网站托管SEO优化公司西华网站优化包年多少钱网站做优化可信火24星宜秀区网站seo优化排名url优化网站排名河源网站优化软件崇明区百度网站优化价格成都专业网站优化seo毕节优化网站网站关键词优化蚊云速捷一流福田网站关键词优化茂名网站搜索引擎优化宁德网站搜索优化南京网站优化可以吗大型网站优化设计深圳各大网站优化方案网站关键词优化就选火13星禄劝网站优化策划温州网站建设优化桂林网站关键词优化多少钱网站产品优化证实易速达家具企业网站分析和优化最好的网站排名优化工刷手机网站优化快速广州网站推广优化案例如何优化百度网站优化社区网站长春网站性能优化网站推广优化怎么选择外链宣传优化网站谷歌网站内容优化做网站内部优化的一般技巧永仁百度网站优化费用上海搜索引擎网站优化公司南通网站优化企业聊城冠县钢管网站优化最好的网站优化公司哪个好做好优化网站还要优化排名吗苏州网站seo优化费用网站每天发信息优化石家庄服务好的网站优化有哪些西城网站整站优化茂名怎样优化网站湖南网站优化营商环境网站优化平台收费自贡网站优化外包百度seo优化技术网站优化郑州怎么优化网站优化网站的工具有哪些丹东seo优化网站推广网站搜索引擎优化有什么作用东坑家具网站优化营销江门优化网站关键词网站域名优化坟云速捷声名青岛网站优化哪家专业手机网站免费优化软件唐山网站优化公司费用合作网站网址优化网站优化的三大标签广州房地产网站优化公司武汉优质网站优化加盟的价格盐城网站怎么优化网站优化效果慢购物网站还有那些优化哈尔滨网站优化长尾词国外优化网站方法自动优化程序网站网站品牌优化方案长宁区官方网站优化方案定制聊城优化网站电话东莞网站优化权重安吉网站优化平台外贸网站谷歌优化价格医院网站建设优化

合作伙伴

天下标王

龙岗网络公司
深圳网站优化
龙岗网站建设
坪山网站建设
百度标王推广
天下网标王
SEO优化按天计费
SEO按天计费系统