microsoft sql server无法删除_分享一则生产数据库sql优化案例:从无法删除到耗时20秒
概述
今天主要分享一条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秒相关推荐
- sql not exists用法_牛客网数据库SQL实战详细剖析(5160)(更新完结)
文章来源:大数据肌肉猿 作者:无精疯 这是一个系列文章,总共61题,分6期,有答案以及解题思路,并附上解题的一个思考过程. 具体题目可参考牛客网的SQL实战模块: https://www.nowcod ...
- sql server java类型_使用基本 JDBC 数据类型 - SQL Server | Microsoft Docs
使用基本数据类型Using basic data types 01/29/2021 本文内容 Microsoft JDBC Driver for SQL ServerMicrosoft JDBC Dr ...
- sql server版本 性能_迁移到高版本 SQL 数据库后,性能变差了
//迁移高版本 SQL// 高版本 SQL,一定要迁移吗? 是的,必须的.数据库软件毕竟不是互联网的单体应用,UI 一天一变,讨用户的巧.这类商用软件讲究的是稳定,可靠和安全.所以一个大版本的上线, ...
- sql server排序慢_用Nginx实现接口慢查询并可示化展示TOP 20
相信很多小伙伴都见过一些商业产品中的url接口响应时间,实时汇总显示功能.可以理解为web接口的慢查询,与sql的慢查询有异曲同工之妙,但是想做却无从入手不知道怎么实现此功能,所以今天就教大家如何实现 ...
- mysql世界国家数据库_世界国家 的数据库sql
insert into lz_countries(no, title, code) values(1, '中国', 'CHINA'); insert into lz_countries(no, tit ...
- Oracle 数据怎么实时同步到 SQL Server | 亲测干货分享建议收藏
摘要: 很多 DBA 同学经常会遇到要从一个数据库实时同步到另一个数据库的问题,同构数据还相对容易,遇上异构数据.表多.数据量大等情况就难以同步.我自己亲测了一种方式,可以非常方便地完成 Oracle ...
- sql server键查找_如何查找SQL Server版本
sql server键查找 In this article, we will explore how to find the SQL Server version details with vario ...
- 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 ...
- sql server登录名、服务器角色、数据库用户、数据库角色、架构区别联系
原创链接:https://www.cnblogs.com/lxf1117/p/6762315.html sql server登录名.服务器角色.数据库用户.数据库角色.架构区别联系 1.一个数据库用户 ...
- SQL Server 无法生成 FRunCM 线程。请查看 SQL Server 错误日志和 Windows 事件日志(转)...
前言: 今天遇到这个sql服务无法启用 .无法登陆 的情况..在google 百度 搜了一下.发现很多网站都是采集来的数据..(很奇怪这些采集站都那么靠前!) 照着文章里边的方法去试试都不行,,,后来 ...
最新文章
- 【matlab】第三章数组和数组的运算
- android+布局分块,android的List View的Item布局问题
- 扩展32KRAM的STC8H8K信号采集版
- 华为SDSec分为几层
- Apache Spark学习:利用Eclipse构建Spark集成开发环境
- C语言程序设计之最大公约数与最小公倍数算法
- Python基于socket实现的TCP客户端
- 《设计师要懂心理学》-第四章-人如何思考
- 数学趣题——寻找水仙花数
- Web服务器 - Nginx配置介绍
- php mysql 验证码代码_PHP_PHP 验证码的实现代码,checkcode.php 生成验证码图片, - phpStudy...
- EntityFramework中的DbContext使用疑点说明
- SEM实验室常见仪器计量问题详解及仪器标准大全附
- python是一门_人人用Python 篇一:Python是一门人人可掌握的手艺
- java动态表头_easyPOI动态表头
- 语音预处理之分帧加窗
- Oracle DB 数据库维护
- 改oracle sockets,安装GI最后检查时出现warning - Domain Sockets,PRVG-11750
- photoshop--色彩管理
- ubuntu18.0404 aws 云服务器启动和登陆 windows 虚拟机