sql-server – 谓词:在WHERE子句或JOIN子句中?
拜见英文谜底 >
Is a join optimized to a where clause at runtime?4个
另一位DBA向我提议,可以通过将WHERE子句谓词移入FROM子句来改造某些查询的机能,这样: SELECT * FROM dbo.table1 t1 INNER JOIN dbo.table3 t3 ON t1.ID = t3.ID LEFT OUTER JOIN dbo.table2 t2 ON t1.ID = t2.ID WHERE t1.CreateDate >= '2015-07-31 00:00:00'; 会成为: SELECT * FROM dbo.table1 t1 INNER JOIN dbo.table3 t3 ON t1.ID = t3.ID AND t1.CreateDate >= '2015-07-31 00:00:00' LEFT OUTER JOIN dbo.table2 t2 ON t1.ID = t2.ID; 显然,第一个示例的寄义是查询优化器将起首执行JOIN,然后应用WHERE子句,对付具有大型表的伟大查询,该子句的执行结果不如我们手动将查询从头写入表中所示的表单.第二个例子.显然这仅合用于外毗连,即假如这是一个内毗连,则类型化器现实上会将WHERE谓词移动到FROM子句中. 有人可以证拭魅这种举动吗?在某处我可以看一些文档吗?我能在执行打算中看到这个吗? 1 – 是的,我知道这很迂腐. 办理要领我想这是“它取决于”的一个方面.在通例执行中没有或至少险些没有差别. 一旦查询更伟大,我们就会认为它会变得更风趣. >嵌套毗连 我会添加LEFT和CROSS Joins,以为它们已经是你的例子的一部门. 关于“SQL Server类型化的履历” – 我会说,除了查察代码之外,你不会有太多的自我保持.它凡是只是一个“它取决于!” (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |