zoukankan      html  css  js  c++  java
  • sql查询语句优化需要注意的几点

     

    为了获得稳定的执行性能,SQL语句越简单越好。对复杂的SQL语句,要设法对之进行简化。


    常见的简化规则如下:
     
    1)不要有超过5个以上的表连接(JOIN)
    2)考虑使用临时表或表变量存放中间结果。
    3)少用子查询
    4)视图嵌套不要过深,一般视图嵌套不要超过2个为宜。
    5)限制结果集
    6)合理的表设计          这个非常重要
    7)建立合适的索引       这个非常重要
     

    连接的表越多,其编译的时间和连接的开销也越大,性能越不好控制。

    最好是把连接拆开成较小的几个部分逐个顺序执行。

    优先执行那些能够大量减少结果的连接。

    拆分的好处不仅仅是减少SQL Server优化的时间,更使得SQL语句能够以你可以预测的方式和顺序执行。


    如果一定需要连接很多表才能得到数据,那么很可能意味着设计上的缺陷。

     


    连接是outer join,非常不好。因为outer join意味着必须对左表或右表查询所有行。

    如果表很大而没有相应的where语句,那么outer join很容易导致table scan或index scan。

    要尽量使用inner join避免scan整个表。


    优化建议:
     
    1)使用临时表存放t1表的结果,能大大减少logical reads(或返回行数)的操作要优先执行。
     仔细分析语句,你会发现where中的条件全是针对表t1的,所以直接使用上面的where子句查询表t1,然后把结果存放再临时表#t1中:
     
    Select t1….. into #tt1 from t1 where…(和上面的where一样)
     
    2)再把#tt1和其他表进行连接:
     
    Select #t1…
    Left outer join …
    Left outer join…
     
     
    3)修改 like 程序,去掉前置百分号。like语句却因为前置百分号而无法使用索引
    4)从系统设计的角度修改语句,去掉outer join。
    5)考虑组合索引或覆盖索引消除clustered index scan。
     
    上面1和2点建议立即消除了worktable,性能提高了几倍以上,效果非常明显。
  • 相关阅读:
    es6常用语法(持续更新中)
    发送请求时params和data的区别
    js引擎查询 LHS RHS(消化ing)
    Linux常用命令(持续更新)
    Https理解
    MVVM理解
    原生js与jquery区别
    Cookie如何防范XXS攻击
    基于python的appium环境搭建
    pycharm安装步骤
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3181610.html
Copyright © 2011-2022 走看看