使用join关键字加入或使用=加入有什么区别

时间:2012-04-04 14:11:22

标签: sql sql-server-2008 query-optimization

  

可能重复:
  Explicit vs implicit SQL joins
  In MySQL queries, why use join instead of where?

使用=运算符查询: -

 Select us.FirstName 
       ,uf.FileTitle 
       ,pq.Question
       ,pa.Answer from
 UserMst us,UploadedFile uf,PollQuestion pq,PollAnswer pa,PollResult pr
 where us.UserId = pr.U_id 
       and uf.FileId=pr.A_id 
       and pq.Q_id=pr.Q_id 
       and pa.A_id=pr.ans_id

使用Join关键字进行查询: -

  Select us.FirstName,uf.FileTitle ,pq.Question,pa.Answer  from 
  PollResult pr join UserMst us on us.UserId = pr.U_id  
           join UploadedFile uf on uf.FileId = pr.A_id 
           join PollQuestion pq on pq.Q_id= pr.Q_id
           join PollAnswer pa on pa.A_id =pr.ans_id

哪一个更好执行?

2 个答案:

答案 0 :(得分:1)

在SQL 2008中,它几乎没有任何区别。 (虽然我认为以前的方法可能会被弃用?)

但是,在很多SQL实现中,如果每个连接都有一个条件,那么后续连接将以较少的值连接,因此稍快一些。

如果你把所有条件都放在最后,那么这种优化不会发生到最后。因此,您最终会得到一个大量的行列表,这些行列表一次性过滤,理论上会慢一些。

例如:

如果表A有1000行,并且您连接到另一个表B,有1000行,但是指定了仅加入B中10个行的连接条件,那么您有10行。如果你然后加入表C,那么你只会加入10行。

如果你加入A到B到C然后过滤,你过滤1000行(或者可能是1,000,000,取决于连接)

因此,为了交叉实现兼容性和可读性,最好使用后一版本。

答案 1 :(得分:0)

我更喜欢连接我觉得最常见的习惯是总是将连接条件放在ON子句中(除非它是一个外连接,而你实际上确实需要在where子句中)对于读取查询的人来说,更清楚地了解表的连接条件,并且它还有助于防止WHERE子句长达数十行。因为它很干净