开发者社区> 问答> 正文

执行顺序,哪个更快

这是一个示例代码,这两个查询中“ 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

展开
收起
祖安文状元 2020-01-03 18:36:03 530 0
1 条回答
写回答
取消 提交回答
  • 我希望第一个查询的速度至少要和第二个查询的速度一样快,因为查询的形状是非常普遍的查询形式,并且已经过很好的分析和优化。

    话虽这么说,SQL Server已经相当成熟,并且可以在逻辑上“重写”第二个查询以执行与第一个查询完全相同的计划和性能。

    [请注意,SQL不是一种过程语言,我们并不是在说什么事情以什么顺序执行,而是在描述我们希望在哪些条件下使用哪些行/列。如果两个写不同的查询表示完全相同的事情,则只要返回预期的行,数据库就可以在内部执行任何操作。但是有时候我们的编写方式会并且确实会影响性能。]

    EXPLAIN在每个查询上使用可以查看查询计划和预期成本之间的差异。

    2020-01-03 18:40:53
    赞同 展开评论 打赏
问答分类:
C++
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载