【问题标题】:SQL Joins condtion and Where Condition [duplicate]SQL 连接条件和 Where 条件 [重复]
【发布时间】:2014-08-13 14:01:45
【问题描述】:

我对 where 条件和内部连接条件有疑问。

他们是:

例如:

select * from table1 T

inner join table2 F on F.tkey=T.tkey and F.date >= '20140104'

select * from table1 T

inner join table2 F on F.tkey=T.tkey

where F.date >= '20140104'

**这里哪个会执行得更快,为什么?

【问题讨论】:

  • 看执行计划自己看看
  • 到底是什么问题?这些是否编译?还是您只是在问哪个执行得更快?
  • 只问哪个执行得更快

标签: sql join where


【解决方案1】:

任何 SQL 查询的执行顺序是:

FROM ->ON ->JOIN -> WHERE -> GROUP BY ->WITH CUBE 或 WITH ROLLUP->HAVING->SELECT->DISTINCT->ORDER BY ->TOP

所以第一个查询会执行得更快,因为它会在加入自身时根据给定条件过滤行,而第二个查询将首先加入表,然后再过滤行

【讨论】:

  • 这不一定是真的——这取决于他使用的是什么 SQL 解析器以及解析器如何分析他可能得到不同结果的语句。在许多情况下,上面的查询很简单,它可能会为两个查询选择相同的执行计划。
猜你喜欢
  • 2017-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-11
  • 1970-01-01
相关资源
最近更新 更多