zoukankan      html  css  js  c++  java
  • mssql执行计划查看的一些知识


    在MSSQL中,查看较慢语句的执行计划,就是一个比较直观的方式,

    如果查看执行计划呢:


                                                   

    1.从右到左,从上到下的顺序阅读执行计划
    2.执行计划中每个图标代表一个运算符,总开销为100%
    3.数据从右向左在两个操作符之间流动,由一个连接箭头表示。
    4.操作符之间连接箭头的宽度是传输行数的图形表示。
    5.同一列的两个操作符之间的连接机制将是嵌套的循环连接,Hash    匹配或者合并连接。

     

    1. 识别执行计划中开销较大的步骤

     

    1. 关注较高开销的节点,一般是表扫描、假脱机、排序等运算(如上列中的排序)

     

    b.查看节点之间连接箭头的宽度。

          箭头的宽度代表传输的数据量大小。

          分析箭头左边的节点为什么需要这么多行,是否可以过滤。

          检查箭头的属性,实际的行与估计的行相差很大可能是统计信息过时。

        c.寻找hash连接操作。对于小的结果集,嵌套的循环连接通常是首选的连接 技术。

     

        d.寻找书签查找操作。大结果集的书签操作可能造成大量的逻辑读。

    e.寻找执行排序操作的步骤。这表明数据没有以正确的排序进行检索。

     

    1. 分析索引有效性

    a.数据检索操作  

        通过查看执行计划中该表的数据检索机制,来判断对该表的查询是否高效。         

    1. 查找优于扫描。

       

    1. RID查找与键查找

    键查找优于rid查找,建议对表都加上聚集索引

     

    1. 分析连接有效性

      a. Hash连接

          

           Hash连接有两个输入—建立输入和探查输入。较小数据量的做为建立输入。

           在建立阶段,建立输入被扫描或计算,并在内存中建立hash表,每个行根据计算的hash键值被插入的hash表元中。

           在探查阶段,对于每个探查行计算hash键值;与hash表元进行匹配。

     

       b. 合并连接

     

            如果连接输入列上已经排序,优化器会为其选择合并连接,合并连接比  Hash匹配更快。

           查询优化器使用hash连接高效处理大的、未排序、没有索引的输入。

     

       c.嵌套循环连接

         

           嵌套循环连接使用一个连接作为外部输入表,另一个作为内部输入表。

    外部循环逐行扫描外部输入表,内部循环为每一个外部行执行一次,搜索匹  配行。

    如果外部输入数据量较小,内部输入大但有索引,嵌套循环连接时非常有效的。


     

  • 相关阅读:
    CodeForces 453A Little Pony and Expected Maximum
    bzoj1415[NOI2005]聪聪和可可-期望的线性性
    记lrd的高二上学期第五次调研考试
    bzoj4443[SCOI2015]小凸玩矩阵
    bzoj1415[NOI2005]聪聪和可可
    bzoj2702[SDOI2012]走迷宫
    connectionstrings-MYSQL
    connectionstrings-oracle
    connectionstrings-sql server 2012
    sqlserver存储过程中SELECT 与 SET 对变量赋值的区别[转]
  • 原文地址:https://www.cnblogs.com/qiaokai/p/7997852.html
Copyright © 2011-2022 走看看