SQL优化--使用关联查询代替子查询

时间:2022-09-17 22:32:50

    SQL优化--使用关联查询代替子查询

 

   测试例子:

    子查询:

select  a. * ,
(
select  workflowname  from  workflowbase  where  id = workflowid) workflowname
from    [ [zping.com ] ]] a
where  a.operator = ' 402882ed1112669201112a8385892f33 '

 

   执行结果:

( 360  行受影响)
表 
' Worktable ' 。扫描计数  360 ,逻辑读取  142334  次,物理读取  0  次,预读  0  次,lob 逻辑读取  0  次,lob 物理读取  0  次,lob 预读  0  次。
表 
' workflowbase ' 。扫描计数  1 ,逻辑读取  1589  次,物理读取  0  次,预读  0  次,lob 逻辑读取  0  次,lob 物理读取  0  次,lob 预读  0  次。
表 
' [zping.com] ' 。扫描计数  1 ,逻辑读取  366  次,物理读取  0  次,预读  0  次,lob 逻辑读取  0  次,lob 物理读取  0  次,lob 预读  0  次。

 

 关联查询:

select  a. * ,b.workflowname
from    [ [zping.com ] ]] a  inner   join   workflowbase b  on  a.workflowid = b.id
where  operator = ' 402882ed1112669201112a8385892f33 '

  执行结果:  

( 360  行受影响)
表 
' Worktable ' 。扫描计数  0 ,逻辑读取  0  次,物理读取  0  次,预读  0  次,lob 逻辑读取  0  次,lob 物理读取  0  次,lob 预读  0  次。
表 
' workflowbase ' 。扫描计数  1 ,逻辑读取  1589  次,物理读取  0  次,预读  0  次,lob 逻辑读取  0  次,lob 物理读取  0  次,lob 预读  0  次。
表 
' [zping.com] ' 。扫描计数  1 ,逻辑读取  366  次,物理读取  0  次,预读  0  次,lob 逻辑读取  0  次,lob 物理读取  0  次,lob 预读  0  次。

 

   这里:子查询IO次数:142334 +1589+366=144289

           关联查询IO次数1589 +366 =1922

       关联查询是子查询的75倍   

 

总结:

 

     使用子查询和关联查询,一般情况下如果能用关联查询就不用子查询,