这是一个示例代码,这两个查询中“ where”子句的执行顺序是否不同?我是否应该期望第二个查询比第一个查询运行得更快?
SELECT A.*
FROM TABLE1 A
INNER JOIN TABLE2 B
ON A.COLUMN3=B.COLUMN3
WHERE A.COLUMN1 = 2 AND B.COLUMN2 = 4
VS
SELECT A.*
FROM (SELECT * FROM TABLE1 WHERE TABLE1.COLUMN1 =2)A
INNER JOIN (SELECT * FROM TABLE2 WHERE TABLE2.COLUMN2 = 4)B
ON A.COLUMN3=B.COLUMN3
我希望第一个查询的速度至少要和第二个查询的速度一样快,因为查询的形状是非常普遍的查询形式,并且已经过很好的分析和优化。
话虽这么说,SQL Server已经相当成熟,并且可以在逻辑上“重写”第二个查询以执行与第一个查询完全相同的计划和性能。
[请注意,SQL不是一种过程语言,我们并不是在说什么事情以什么顺序执行,而是在描述我们希望在哪些条件下使用哪些行/列。如果两个写不同的查询表示完全相同的事情,则只要返回预期的行,数据库就可以在内部执行任何操作。但是有时候我们的编写方式会并且确实会影响性能。]
EXPLAIN在每个查询上使用可以查看查询计划和预期成本之间的差异。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。