专栏首页有关SQL移动下SQL中的表位置,性能提高18倍

移动下SQL中的表位置,性能提高18倍

图 | 榖依米

下午,所有的SQL慢如牛。

平日里2-3秒搞定的SQL,这会非得弄个7-8秒。timeout更是频频爆出。搞得办公室怨叫声此起彼伏,真有点《生命协奏曲》的味道。

我是最听不得这些哀怨的,不仅仅是喊的难听,那些消极的声音,仿佛来自地狱的催命;更多是觉得,那是对我们这些DB Guy及其不友好的宣战啊。

DBA是公司最宝贵的资源,我们肯定调度过不来。索性自己上吧。还记得之前我说过的调优排错“三板斧”吗,今天又派上用场了。

第一板斧,找到谁在数据库上乱来。

幸好只是开发库,只有数量不多的连接,一查就知道,某个SQL发出了SOS的等待,占用大量的CPU,而且还在拼命的发出多线程请求。截获了它的SQL文本,拿出来一看,差点吓尿。

如此混乱的编码,换在平时,我可能都没兴趣看。poorman's formatter 这么好用的插件,估计这朋友对此一无所知。

好嘛,我帮你格式化下:

这回清晰多了。但各种缺陷也暴露无遗。很明显,会很慢。

丢到 SSMS 里面,足足等了69秒才出来数据。当时我的汗啊,这么慢的SQL在我的机器上发出,要被抓出来,不被大家给笑死。L 倒还是那个 L, 不过是 Laugh 罢了。(老读者一定知道 L 这个梗)

第二板斧,查看执行计划

排除那些复杂的 Index Spool,Stream Aggregation,这里面最吸引我的是同一张表,居然要扫描两次,就是那张 XXX_PER表。所以我不得不重新看下这段SQL的逻辑,简直是鬼才!

这种写法,大约就是“只有我看得懂的SQL,你们离不开我”的想法作祟下,搞出来的鬼。据我经验分析,往往都是刚出道的小聪明。

但凡看到我之前写过的文章 如何写好 5000 行的 SQL 代码,是绝对不可能写出这样的SQL。要么没懂重构的意义,要么就是甩小聪明。

所以,我做了些小调整:

把所有用到的列,都加到一个索引里面。再检查下执行计划

干净了,变快了。4秒,87426 条数据。18 倍的性能提升。当然,还有提升空间。

短暂的小插曲,每天都有。及时复盘,提高自己水平。

总结下,今天用到的技能:

1 - "三板斧"找端倪

2 - 三星索引好帮手

3 - 执行算子要常翻

--完--

本文分享自微信公众号 - 有关SQL(SQLHub),作者:Lenis

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 零基础 SQL 数据库小白,从入门到精通的学习路线与书单

    我观察了 865 个 SQL 入门者,发现大家在学习 SQL 的时候,最大的问题不是 SQL 语法,而是对 SQL 原理的不熟悉。

    Lenis
  • SQL 的编译原理,了解下?

    一大帮子的开发,窝在一处办公,想想这酸爽,谁见谁愁。L 早已下楼去星巴克加冰了,剩下小 C 在对付 同样焦灼的 Support.

    Lenis
  • 想精通SQL Server, T-SQL的全历史你听过吗?

    早在20世纪70年代,两位年轻人Ray Boyce 和 Donald D. Chamberlin,成功将上帝语言(关系数学)编译为凡人的工具。

    Lenis
  • 谷歌又傻X之BigQuery ML

    最近工作忙,又努力在写干活,没怎么关注互联网行业的发展。周末好不容易补补课,就发现了谷歌在其非常成功的云产品BigQuery上发布了BigQuery ML。说白...

    用户1564362
  • SQL Server从入门到精通.pdf

    《SQL Server从入门到精通》从初学者的角度出发,通过通俗易懂的语言、丰富多彩的实例,详细地介绍了SQL Server 2008开发应该掌握的各方面技术...

    用户3157710
  • 45岁的 SQL 语言要被淘汰了?

    在 SQL 被引入的 45 年中,它经历了许多数据库的诞生和消亡,也经历了许多数据处理方式的诞生和消亡。

    Java技术栈
  • 零基础 SQL 数据库小白,从入门到精通的学习路线与书单

    我观察了 865 个 SQL 入门者,发现大家在学习 SQL 的时候,最大的问题不是 SQL 语法,而是对 SQL 原理的不熟悉。

    Lenis
  • 在线就能用的 SQL 练习平台我给你找好了!

    在看完了某 《xxx 必知必会》以后,我觉得我膨胀了,立马某度 "xxx SQL 面试 100 题"、”SQL 岗位 xxx 个面试题“,准备大展手脚...

    帅地
  • 【DB笔试面试670】在Oracle中,什么是SQL实时监控?

    在Oracle 11g中,V$SESSION视图增加了一些新的字段,这其中包括SQL_EXEC_START和SQL_EXEC_ID,这两个字段实际上代表了Ora...

    小麦苗DBA宝典
  • 大数据 SQL Boy 脱坑指南

    不可否认的是 SQL 是一个伟大的发明,它让增删改查的操作更加地便捷化,而且 SQL 的学习成本相对其他编程语言来说较低,被逼到会写 SQL 的运营和产品我都见...

    用户2769421

扫码关注云+社区

领取腾讯云代金券