• 如何测试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 毫秒。

  • 相关阅读:
    PHP AES256加密算法
    PHP字符串比较
    linux常用命令
    播放音乐方法(兼容IE FF Chrome Opera Safari)
    JS小游戏象棋暗棋
    Sublime Text 2 介紹
    php生成QRcode
    几种极其隐蔽的XSS注入的防护
    JS判断碰撞方法
    php 发送带附件邮件
  • 原文地址:https://www.cnblogs.com/wyy226wyj/p/3784581.html
Copyright © 2020-2023  润新知