zoukankan      html  css  js  c++  java
  • 如何测试sql语句性能,提高执行效率

    有时候我们经常为我们的sql语句执行效率低下发愁,反复优化后,可还是得不到提高

            那么你就用这条语句找出你sql到底是在哪里慢了

            示例:

            SET STATISTICS io ON
            SET STATISTICS time ON
            go
             ---你要测试的sql语句
             select top 100 * from TBL_Cot_RecStaticList
            go
            SET STATISTICS profile OFF
            SET STATISTICS io OFF
            SET STATISTICS time OFF

             显示信息:

            SQL Server 分析和编译时间:

            CPU 时间 = 0 毫秒,占用时间 = 59 毫秒。

            (100 行受影响)         表 'TBL_Cot_RecStaticList'。扫描计数 1,逻辑读取 14 次,物理读取 2 次,预读 992 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

            SQL Server 执行时间:            CPU 时间 = 0 毫秒,占用时间 = 306 毫秒。        

            SQL Server 分析和编译时间:            CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。

            SQL Server 执行时间:            CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。

            SQL Server 执行时间:            CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。

    转发原文:http://www.cnblogs.com/lynnlin/archive/2008/06/18/1224376.html

    为了让您的程序执行的效率更高,SQL的效率一定不可忽视。

    现有以下方法去检测SQL的执行效率。  

    对于多表查询的效率测试:

    1)直接from ,where方式。

    SET STATISTICS io ON
            SET STATISTICS time ON
            go
      ---你要测试的sql语句
    select g.grpName,t.grpID,t.flowID,t.typeName,t.description
    from hyGroup g  ,hyType t where  t.grpID = g.flowID      
            
            go
            SET STATISTICS profile OFF
            SET STATISTICS io OFF
            SET STATISTICS time OFF

    SQL Server 分析和编译时间:
       CPU 时间 = 4 毫秒,占用时间 = 4 毫秒。

    (8 行受影响)
    表 'hyType'。扫描计数 1,逻辑读取 7 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
    表 'hyGroup'。扫描计数 1,逻辑读取 1 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

    SQL Server 执行时间:
       CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。
    SQL Server 分析和编译时间:
       CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。

    SQL Server 执行时间:
       CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。

    SQL Server 执行时间:
       CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。

    2)inner join 方式:

      SET STATISTICS io ON
            SET STATISTICS time ON
            go
      ---你要测试的sql语句
    select g.grpName,t.grpID,t.flowID,t.typeName,t.description
    from hyGroup g  inner join hyType t on   t.grpID = g.flowID      
            
            go
            SET STATISTICS profile OFF
            SET STATISTICS io OFF
            SET STATISTICS time OFF
    SQL Server 分析和编译时间:
       CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。

    (8 行受影响)
    表 'hyType'。扫描计数 1,逻辑读取 7 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
    表 'hyGroup'。扫描计数 1,逻辑读取 1 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

    SQL Server 执行时间:
       CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。
    SQL Server 分析和编译时间:
       CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。

    SQL Server 执行时间:
       CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。

    SQL Server 执行时间:
       CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。

    3)left join 方式

      SET STATISTICS io ON
            SET STATISTICS time ON
            go
      ---你要测试的sql语句
    select g.grpName,t.grpID,t.flowID,t.typeName,t.description
    from hyGroup g  left join hyType t on   t.grpID = g.flowID      
            
            go
            SET STATISTICS profile OFF
            SET STATISTICS io OFF
            SET STATISTICS time OFF

    SQL Server 分析和编译时间:
       CPU 时间 = 0 毫秒,占用时间 = 3 毫秒。

    (10 行受影响)
    表 'hyType'。扫描计数 1,逻辑读取 7 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
    表 'hyGroup'。扫描计数 1,逻辑读取 1 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

    SQL Server 执行时间:
       CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。
    SQL Server 分析和编译时间:
       CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。

    SQL Server 执行时间:
       CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。

    SQL Server 执行时间:
       CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。

    4)right join 方式

      SET STATISTICS io ON
            SET STATISTICS time ON
            go
      ---你要测试的sql语句
    select g.grpName,t.grpID,t.flowID,t.typeName,t.description
    from hyGroup g  right join hyType t on   t.grpID = g.flowID      
            
            go
            SET STATISTICS profile OFF
            SET STATISTICS io OFF
            SET STATISTICS time OFF

    SQL Server 分析和编译时间:
       CPU 时间 = 0 毫秒,占用时间 = 3 毫秒。

    (8 行受影响)
    表 'hyGroup'。扫描计数 1,逻辑读取 8 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
    表 'hyType'。扫描计数 1,逻辑读取 1 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

    SQL Server 执行时间:
       CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。
    SQL Server 分析和编译时间:
       CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。

    SQL Server 执行时间:
       CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。

    SQL Server 执行时间:
       CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。

  • 相关阅读:
    HDOJ_ACM_超级楼梯
    HDOJ_ACM_下沙的沙子有几粒?
    杭电_ACM_How Many Trees
    HDOJ_ACM_Tiling_easy version
    HDOJ_ACM_母牛的故事
    HDOJ_ACM_小兔的棋盘
    HDOJ_ACM_一只小蜜蜂
    杭电_ACM_Count the Trees
    HDOJ_ACM_折线分割平面
    Sun Solaris下JAVA以及JSP开发环境的配制小记
  • 原文地址:https://www.cnblogs.com/wyy226wyj/p/3784581.html
Copyright © 2011-2022 走看看