OR 不能瞎用

午饭间的小 C,答应着一起吃饭,却眼不离屏。

我知道准是上午人甲产品经理又来了一个脏活。话说 SQL 程序员本身是个光荣的职业,顷刻间百万数据、百亿金额从指间流过,心都不带咯噔的。在心如止水的 SQL 编码师眼里,金钱跟粪土没区别,非说有什么一样的属性,那都是臭的。却始终被人看做拉数据的,呼来喝去。

算了,似乎吃饭时候说这事儿不好。

小 C 现在已经是 BI Experienced Engineer 了,历练了 500W+ 电商用户的数据仓库项目后,对付日常的报表以及取数的需求,技术上绰绰有余。唯一不足可能就是脸皮薄,跟产品扯皮完全下风。要我说呢,现在的人精多的很,善于保护自己是每个程序员的弱项,包括保护自己的时间与精力。

“C, 还不吃饭啊?”

“L,你快来帮我看看,这段 SQL 效率有问题,人甲说太慢了”

“有这么复杂,我看看”

“就是这段,简单的 Join 拖慢了整个 sp ”

顺着小 C 的手指,总共 8 行的代码每次都要运行 7,8 秒,确实太慢。即使是第二次,第三次运行,时间误差不过 1 秒。那就肯定不是没建索引这种问题了。小 C 熟练的切换到执行计划的截图,她显然已经知道我对付慢查询的三板斧了。“现在的后生可畏啊,老师傅们快被他们榨干了”,当然我是不会这么对着她的面说的。

最显著的地方是那么厚厚的一根线

UNION ALL 带你飞

一看时间,12:15,饿扁了快。

我这人正常情况下,不发火,情绪还算稳定。但要我饿着肚子跟你磨性子,对不起,我可能真的是属于要跟产品干起来的那种。属猪,爱好吃!所以我也不想跟小 C 细讲为什么了。直接改了 SQL 语句。

从 8300 ms (也就是 8 秒)一下跳到 46 ms. 性能提升了近 200 倍。

很多人对 SQL 程序员有种偏见,认为就是 CRUD Girl/Boy. 我不说,也不评论,理解偏差每个人都会有。大火的 Java Pk C#,SQL Pk NoSQL, 文科 Pk 理科,这些无脑的例子还少么,对于这类浅见的认识,除了浪费自己的时间与精力,对自己毫无用处。做 JS 的随便写段 SQL 去 10T 的数据库上跑跑就能找到挫败感了;而写 SQL 的你去写个 UI Chart, 头发掉不少。不信啊,你知道 CPU Time, Elapsed Time 是怎么调出来的啊?术业有专攻,练好自己的本事再说。

三流人才,没本事,但臭脾气!

To Do Or Not To Do 是大问题

代码洁癖要不要?

有些程序员有严重的代码洁癖。看到长段的 SQL 总想着要去动手改一改,看到不按自己喜欢的代码格式写的 SQL 总想着去调调格式。比如强制使用大写来规范数据库语法关键字,用驼峰来命名变量,一行一个字段等等。有时候是好事,有时候也不见得。Union all 和 Or 不就是这样么!

做事,还是要有所取舍。

上面的 SQL 改写后,执行计划变得复杂了。我估计很多人蠢蠢欲动要改掉它。看着眼烦,往往是新手被自己情绪带着走的节奏。

本故事纯属虚构,如有雷同纯属巧合

sql执行有时候快有时候慢_如何让你的 SQL 执行的飞起?相关推荐

  1. sql limit不接具体数字_这21个写SQL的好习惯,你要养成呀

    前言 每一个好习惯都是一笔财富,本文分SQL后悔药, SQL性能优化,SQL规范优雅三个方向,分享写SQL的21个好习惯,谢谢阅读,加油哈~ 公众号:「捡田螺的小男孩」 1. 写完SQL先explai ...

  2. java sql 查询中的转义序列不对_在 JDBC 中使用 SQL 转义序列 - SQL Server | Microsoft Docs...

    使用 SQL 转义序列Using SQL escape sequences 08/12/2019 本文内容 按照 JDBC API 的定义,Microsoft JDBC Driver for SQL ...

  3. sql replace替换多个字符_牛客网数据库SQL实战详细剖析(4150)

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

  4. db2 sql 判断select是否为空_学会复杂一点的SQL语句:Oracle DDL和DML

    create:创建表创建用户创建视图 创建表 create table student(id int,score int) ; student后面与括号之间可以有空格可以没有 创建用户 create ...

  5. sql参数化还是被注入了_面试官问你 SQL 注入攻击了吗?

    目录 为什么要聊 SQL 注入攻击? 什么是 SQL 注入攻击? 如何进行 SQL 注入攻击? 如何防范? 常见面试题 瞎比比 为什么要聊 SQL 注入攻击? 我这人有个想法,就是不管自己跳不跳槽,每 ...

  6. ::在sql语句中是什么写法_不懂就问:SQL 语句中 where 条件后 写上1=1 是什么意思...

    程序员在编程过程中,经常会在代码中使用到"where 1=1",这是为什么呢? SQL注入 初次看到这种写法的同学肯定很纳闷,加不加where 1=1,查询不都一样吗?例如: se ...

  7. sql server management studio性能分析_如何分析一条SQL的性能

    来自公众号:谭小谭 这篇文章将给大家介绍如何使用 explain 来分析一条 sql . 网上其实已经有非常多的文章都很详细的介绍了 explain 的使用,这篇文章将实例和原理结合起来,尽量让你有更 ...

  8. sql server整表查询慢_这里有一个慢 SQL 查询等你来优化

    背景 最近工作上遇到一个"神奇"的问题, 或许对大家有帮助, 因此形成本文. 问题大概是, 我有两个表 TableA, TableB, 其中 TableA 表大概百万行级别(存量业 ...

  9. sql文件导入mysql数据库出错_如何解决navicat导入sql文件出错的问题

    如何解决navicat导入sql文件出错的问题 发布时间:2020-11-11 17:05:39 来源:亿速云 阅读:120 作者:小新 这篇文章主要介绍了如何解决navicat导入sql文件出错的问 ...

最新文章

  1. ​别再用方括号在Python中获取字典的值,试试这个方法
  2. 阿里云CentOS7.3搭建多用户私有git服务器(从安装git开始)
  3. 多线程编程学习笔记——任务并行库(三)
  4. 测试私有方法_史上最轻量!阿里开源了新型单元测试Mock工具
  5. linux查看进程调用接口,查看某个程序都调用哪些api函数
  6. 音乐无界限,听见好时光—网易云音乐Linux版震撼来袭!
  7. Cas单点登录的服务器端和客户端的配置
  8. 如何打开Assets.car文件
  9. 【NOIP2005】【Luogu1051】谁拿了最多奖学金
  10. 包含对象的json格式_如何把JSON数据格式转换为Python的类对象?
  11. 《Android 应用案例开发大全(第3版)》——第2章,第2.8节壁纸中的着色器开发...
  12. Q89:全局光照(Global Illumination)——Path Tracing(只用于间接光照)
  13. python 正则表达式集合-抄的
  14. 上周热点回顾(2.19-2.25)
  15. matlab判断传递函数的稳定性,基于Matlab的控制系统稳定性判定.pdf
  16. 离散型特征的处理方法
  17. 谈谈对java的理解
  18. java jdk--同时安装两个jdk并且切换
  19. Ecma 118th GA会议手记
  20. 使用eagle导出PCB制造商可用的gerber文件

热门文章

  1. ASP应用之模板采用
  2. 基于角色的权限管理数据库设计(RBAC)
  3. DWR的学习文档(Hello World,类型转换,Spring,Annotation)
  4. android中sp的意义_两分钟理解Android中SP与DP的区别
  5. Equalize the Remainders(set二分+思维)
  6. XGBoost对比RandomForest、GBDT、决策树、SVM,XGB+LR精度还能提升
  7. html浏览器引擎表示,html – Web浏览器引擎和特殊字符呈现
  8. 倒排索引原理_搜索引擎都在用的倒排索引——原理与实现
  9. pythonchar中的拟合方法_在python中利用numpy求解多项式以及多项式拟合的方法
  10. html中flash的使用,[转载]flash中可以使用的HTML标签[有用]