现在的位置: 首页 > 综合 > 正文

如何测试sql语句性能,提高执行效率

2013年10月06日 ⁄ 综合 ⁄ 共 2533字 ⁄ 字号 评论关闭

为了让您的程序执行的效率更高,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 毫秒。

 

 

综上可以看出:最优的多表查询应该选用等值连接来实现。欢迎转载,但请注明出处,谢谢!

 

抱歉!评论已关闭.