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 毫秒。

  • 相关阅读:
    XMU1349 xmu_1349
    字符串排序
    linux磁盘文件与目录管理系统(2)
    poj 3667 Hotel
    poj 3468 A Simple Problem with Integers
    linux文与目录管理
    Linux的磁盘与文件管理系统(1)
    hdu 1698 Just a Hook
    poj3225 Help with Intervals
    poj 2886Who Gets the Most Candies?
  • 原文地址:https://www.cnblogs.com/wyy226wyj/p/3784581.html
Copyright © 2011-2022 走看看