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 我哭了

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

      

  • 相关阅读:
    poj 2728 Desert King
    uva 439 Knight Moves
    hdu 1875 畅通工程再续
    scau实验题 8600 骑士周游问题(有障碍物)
    scau实验题 8596 Longest Ordered Subsequence
    poj 1679 The Unique MST
    uva 527 Oil Deposits
    poj 2533 Longest Ordered Subsequence
    .net 程序员 java 开发入门
    Collation conflict occur at operation on User define funtion & table's column
  • 原文地址:https://www.cnblogs.com/paulxie/p/13756696.html
Copyright © 2011-2022 走看看