WEB开发网
开发学院数据库MSSQL Server SQL语句分析:ON与WHERE的比较_简单嵌套查询与非嵌... 阅读

SQL语句分析:ON与WHERE的比较_简单嵌套查询与非嵌套查询的比较

 2010-01-07 00:00:00 来源:WEB开发网   
核心提示: 三个“聚集索引扫描”的谓词从上到下分别是:1.t3.c=12.t1.a=1 (seek谓词:t1.id=t3.id)3.t2.b=1(seek谓词:t2.id=t3.id)故可以认为:在MS SQL2005中,条件跟在inner join...on后面和 跟在where后

三个“聚集索引扫描”的谓词从上到下分别是:

1.t3.c=1

2.t1.a=1 (seek谓词:t1.id=t3.id)

3.t2.b=1 (seek谓词:t2.id=t3.id)

故可以认为:在MS SQL2005中,条件跟在inner join...on后面 和 跟在where后面是等价的。

接着看嵌套查询:

嵌套inner join

d.select * from t1
inner join (select * from t2 where t2.b=1)a on t1.id=a.id
inner join t3 on t1.id = t3.id
where t1.a=1 and t3.c=1
e.select * from t1
inner join (select * from t2 where t2.b=1)a on t1.id=a.id
inner join (select * from t3 where t3.c=1)b on t1.id=b.id
where t1.a=1
f.elect * from t1
inner join (select t3.id,t2.b,t3.c from t3 inner join t2 on t2.id = t3.id where t2.b=1 and t3.c=1)a on t1.id=a.id
where t1.a=1

第一句sql语句把t2的查询变成子查询,第二句sql语句把t2,t3分别变成子查询,第三句把t2和t3的查询合成一个子查询,再看看实际的执行计划:

SQL语句分析:ON与WHERE的比较_简单嵌套查询与非嵌套查询的比较

查看原图(大图)

跟上面非嵌套查询的执行计划一模一样。

故可以认为:简单(注意是简单的,复杂的情况得另外考虑)嵌套查询和其相对应的非嵌套查询形式,执行效率是一样的(网上一些文章指出这是MS SQL优化器针对这些嵌套查询进行了优化)。

上一页  1 2 3 4  下一页

Tags:SQL 语句 分析

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接