zoukankan      html  css  js  c++  java
  • 给上家公司的一点建议 二

    文章开始之前给大家介绍下我非常讨厌的角色:

    没错就是文丑丑!

    本文就用文丑丑来,来回忆和前公司技术主管关于sql优化的争辩吧。

    大致经过是这样的:我由于公司项目业务相关表(MSSQL)比较多,在做某些业务统计的时候,我用到了  T-SQL with As ,我用此的目的最简单不过:就是在不影响效率的前提下将sql写得更容易看懂。但是在公司任职末期,文丑丑多次找事给我扣些莫须有的帽子。污蔑我写的SQL效率低、sql代码复杂。

    下面我分享几个文丑丑项目使用的sql,即:他们认为的优秀sql

    案例一:

       个人愚见:

    1、Exists 和 Top 这里不觉得有点累赘么?
    

      虽然Exists和Top作用不同,但这里完全可以只用一个命令 就打到相同效果,而且使得SQL简单

           后来我在网上查阅到,也有人讨论过这个话题:https://sqlinthewild.co.za/index.php/2011/04/05/to-top-or-not-to-top-an-exists/

    2、这里声明SQL变量,没必要,反而增加SQL脚本复杂度和SQL服务器运算压力
    

       直接 if》》》select 1 。。。else》》》select 0 不是更简洁么

    3、多个OR条件,何不改用 union all 这样不是更直观,重要的是效率有提升
    

      

    4、避免不必要的SQl运算
    

      如上sql,如果第一个条件满足了,则不关心第一个OR中的计算结果,同理第二个OR的计算结果也不关心。然后截图中的写法 ,每次都要运算三个次,这样显然不是明智的

    5、不会犯低级错误:表别名用 A、B、C 这些
    

      

    6、SQL 条件 A is not null  And A <>0, 同时存在时前者是累赘
    

      只有 A<>0 返回的 A 必定是 not null

    如果是我,我会这样写:

    if exits (A情况)
       begin
           select 1;  //存在
           return;
       end
    
    if exits (B情况)
       begin
           select 1; //存在
           return;
       end
    
    if exits (C情况)
       begin
           select 1; //存在
           return;
       end
    
    select 0  ;//不存在
    

      

    案例二、 大量这样的统计sql

    只能说,这样的sql能让业务展示正确全靠运气! 一看就没搞懂 cross join 和cross apply的区别。 

      

    案例三 当让我去维护这样一个sql 我哭了

     算了,写不下去了,事情都过去了 翻篇了。

      

  • 相关阅读:
    hibernate二级缓存
    hibernateHQL语句
    hibernate之多对多关系
    SPA项目开发之登录注册
    使用vue-cli搭建SPA项目
    elementUI+nodeJS环境搭建
    Vue路由
    Vue模板语法下集
    网页源码爬取
    Vue模板语法上集
  • 原文地址:https://www.cnblogs.com/paulxie/p/13756696.html
Copyright © 2011-2022 走看看