概述

今天主要分享一条sql优化的大致过程,仅供参考。

ps:其实还有个更复杂的sql,大概400行,最后通过缩小结果集实现优化,但是不好写就不放了..


zabbix监控

从监控可以发现在在9点时内存和CPU同时飙升,检查数据库sql发现是一条sql导致。


问题sql

这个定位直接select * from information_schema.proceslist where state!=''就看到了,所以就直接放问题sql了。

其中t_bms_order_base_line表数据有14492760条,执行删除sql的时候走全表扫描,导致一直卡着。

explain select *   from t_bms_order_base_line          where exists  (select 1         from  t_bms_order_base          left join t_bms_order_base_temp         on t_bms_order_base_temp.id=t_bms_order_base.id         where  t_bms_order_base.id=t_bms_order_base_line.order_base and  t_bms_order_base.is_cost='0' )

查看执行计划

很明显删除大表的时候走了全表扫描

检查表上的索引发现order_base字段已建立了相关索引,且order_base区分度为0.2428也是没问题的。(建议大于0.1)


通过exists改写sql

改写后发现这里也没用上索引

explain select *   from t_bms_order_base_line          where exists  (select 1         from  t_bms_order_base          left join t_bms_order_base_temp         on t_bms_order_base_temp.id=t_bms_order_base.id         where  t_bms_order_base.id=t_bms_order_base_line.order_base and  t_bms_order_base.is_cost='0' )

通过联合join改写sql

考虑join改写的方式,测试发现已经走相关的索引,且删除只耗时20秒。

DELETE t_bms_order_base_line FROMt_bms_order_base_lineINNER JOIN ( SELECT t_bms_order_base.id FROM t_bms_order_base_temp LEFT JOIN t_bms_order_base ON t_bms_order_base_temp.id = t_bms_order_base.id WHERE t_bms_order_base.is_cost = '0' ) b ON t_bms_order_base_line.order_base = b.id

后面会分享更多devops和DBA方面内容,感兴趣的朋友可以关注下~ 对了,在sql上需要优化的也可以VX我,一起探讨..

ps:因为懒所以没怎么看头条,所以很多评论和私信都不会及时回复..

microsoft sql server无法删除_分享一则生产数据库sql优化案例:从无法删除到耗时20秒相关推荐

  1. sql not exists用法_牛客网数据库SQL实战详细剖析(5160)(更新完结)

    文章来源:大数据肌肉猿 作者:无精疯 这是一个系列文章,总共61题,分6期,有答案以及解题思路,并附上解题的一个思考过程. 具体题目可参考牛客网的SQL实战模块: https://www.nowcod ...

  2. sql server java类型_使用基本 JDBC 数据类型 - SQL Server | Microsoft Docs

    使用基本数据类型Using basic data types 01/29/2021 本文内容 Microsoft JDBC Driver for SQL ServerMicrosoft JDBC Dr ...

  3. sql server版本 性能_迁移到高版本 SQL 数据库后,性能变差了

    ​//迁移高版本 SQL// 高版本 SQL,一定要迁移吗? 是的,必须的.数据库软件毕竟不是互联网的单体应用,UI 一天一变,讨用户的巧.这类商用软件讲究的是稳定,可靠和安全.所以一个大版本的上线, ...

  4. sql server排序慢_用Nginx实现接口慢查询并可示化展示TOP 20

    相信很多小伙伴都见过一些商业产品中的url接口响应时间,实时汇总显示功能.可以理解为web接口的慢查询,与sql的慢查询有异曲同工之妙,但是想做却无从入手不知道怎么实现此功能,所以今天就教大家如何实现 ...

  5. mysql世界国家数据库_世界国家 的数据库sql

    insert into lz_countries(no, title, code) values(1, '中国', 'CHINA'); insert into lz_countries(no, tit ...

  6. Oracle 数据怎么实时同步到 SQL Server | 亲测干货分享建议收藏

    摘要: 很多 DBA 同学经常会遇到要从一个数据库实时同步到另一个数据库的问题,同构数据还相对容易,遇上异构数据.表多.数据量大等情况就难以同步.我自己亲测了一种方式,可以非常方便地完成 Oracle ...

  7. sql server键查找_如何查找SQL Server版本

    sql server键查找 In this article, we will explore how to find the SQL Server version details with vario ...

  8. sql server父节点_将新节点添加到现有SQL Server Always On可用性组中

    sql server父节点 This is the 5th article in the series of a comprehensive guide to SQL Server Always On ...

  9. sql server登录名、服务器角色、数据库用户、数据库角色、架构区别联系

    原创链接:https://www.cnblogs.com/lxf1117/p/6762315.html sql server登录名.服务器角色.数据库用户.数据库角色.架构区别联系 1.一个数据库用户 ...

  10. SQL Server 无法生成 FRunCM 线程。请查看 SQL Server 错误日志和 Windows 事件日志(转)...

    前言: 今天遇到这个sql服务无法启用 .无法登陆 的情况..在google 百度 搜了一下.发现很多网站都是采集来的数据..(很奇怪这些采集站都那么靠前!) 照着文章里边的方法去试试都不行,,,后来 ...

最新文章

  1. 【matlab】第三章数组和数组的运算
  2. android+布局分块,android的List View的Item布局问题
  3. 扩展32KRAM的STC8H8K信号采集版
  4. 华为SDSec分为几层
  5. Apache Spark学习:利用Eclipse构建Spark集成开发环境
  6. C语言程序设计之最大公约数与最小公倍数算法
  7. Python基于socket实现的TCP客户端
  8. 《设计师要懂心理学》-第四章-人如何思考
  9. 数学趣题——寻找水仙花数
  10. Web服务器 - Nginx配置介绍
  11. php mysql 验证码代码_PHP_PHP 验证码的实现代码,checkcode.php 生成验证码图片, - phpStudy...
  12. EntityFramework中的DbContext使用疑点说明
  13. SEM实验室常见仪器计量问题详解及仪器标准大全附
  14. python是一门_人人用Python 篇一:Python是一门人人可掌握的手艺
  15. java动态表头_easyPOI动态表头
  16. 语音预处理之分帧加窗
  17. Oracle DB 数据库维护
  18. 改oracle sockets,安装GI最后检查时出现warning - Domain Sockets,PRVG-11750
  19. photoshop--色彩管理
  20. ubuntu18.0404 aws 云服务器启动和登陆 windows 虚拟机

热门文章

  1. Hdu-1358Period(KMP算法之next数组的应用)
  2. asp.net状态服务文章阅读
  3. STS热部署,springboot项目中修改代码不用重新启动服务
  4. C++11模板友元语法
  5. Swift 模式匹配
  6. 清除localstorage
  7. linux mysql远程连接
  8. 【转】NSBundle的使用,注意mainBundle和Custom Bundle的区别
  9. 记录一次项目中代码大致优化方向
  10. Redis分布式锁为什么要设置超时时间