当前位置: 代码迷 >> SQL >> SQL优化-施用关联查询代替子查询
  详细解决方案

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

热度:95   发布时间:2016-05-05 14:55:51.0
SQL优化--使用关联查询代替子查询

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

????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倍???

?

总结:

?

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

  相关解决方案