SQL语句分析:ON与WHERE的比较_简单嵌套查询与非嵌套查询的比较
2010-01-07 00:00:00 来源:WEB开发网核心提示:某天的工作是修复某个项目的bug,接着就发现,SQL语句分析:ON与WHERE的比较_简单嵌套查询与非嵌套查询的比较,其sql极其混乱,有非常多的left join和in操作,让“and t2.b=1”和“and t3.c=1”分别在join...on和where之间游走
某天的工作是修复某个项目的bug,接着就发现,其sql极其混乱,有非常多的left join和in操作,还有嵌套查询(只有一个表的嵌套查询)。不知道看到过哪里的资料说,嵌套查询速度慢,于是我把全部嵌套查询都改成join的形式,嵌套查询里面的where条件,我都写到join...on后面去了。突然一个想法冒出来:筛选条件跟在join...on后面 和跟在整个sql语句最后面的where后面有什么区别呢?还有嵌套查询真的慢么?于是便有下面的测试产生,
数据库环境为MS SQL 2005。
一:inner join
先看看非嵌套查询:
非嵌套inner join
a.select * from t1
inner join t2 on t1.id = t2.id
inner join t3 on t1.id = t3.id
where t1.a=1 and t2.b=1 and t3.c=1
b.select * from t1
inner join t2 on t1.id = t2.id and t2.b=1
inner join t3 on t1.id = t3.id
where t1.a=1 and t3.c=1
c.select * from t1
inner join t2 on t1.id = t2.id and t2.b=1
inner join t3 on t1.id = t3.id and t3.c=1
where t1.a=1
在上面三个非嵌套查询,让“and t2.b=1”和“and t3.c=1”分别在join...on和where之间游走,用Management Studio选中“包含实际的执行计划”并执行这三条语句,都得出下面这个执行计划。
查看原图(大图)
- ››SQL Server 2008 R2 下如何清理数据库日志文件
- ››sqlite 存取中文的解决方法
- ››SQL2005、2008、2000 清空删除日志
- ››SQL Server 2005和SQL Server 2000数据的相互导入...
- ››sql server 2008 在安装了活动目录以后无法启动服...
- ››sqlserver 每30分自动生成一次
- ››分析Android 开机启动慢的原因
- ››sqlite 数据库 对 BOOL型 数据的插入处理正确用法...
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
更多精彩
赞助商链接