0

可能重复:
显式与隐式 SQL 连接
在 MySQL 查询中,为什么使用连接而不是 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

哪一个在执行上更好?

4

2 回答 2

1

在 SQL 2008 中几乎没有什么区别。(虽然我认为前一种方法可能会被弃用?)

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

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

例如:

如果表 A 有 1000 行,而您连接到另一个有 1000 行的表 B,但指定了仅连接到 B 中的 10 行的 int eh 连接条件,则您有 10 行。如果您然后加入表 C,您将只加入 10 行。

如果您将 A 连接到 B 到 C 然后过滤,您将过滤 1000 行(或者可能 1,000,000 行,具体取决于连接)

所以为了交叉实现的兼容性和可读性,最好使用后一个版本。

于 2012-04-04T14:14:33.787 回答
0

我更喜欢连接,我认为养成将连接条件放在 ON 子句中的习惯是最有意义的(除非它是一个外连接并且你确实希望它在 where 子句中),因为它更清楚任何阅读您的查询的人都在什么条件下加入表,并且它还有助于防止 WHERE 子句长达数十行。因为它干净

于 2012-04-04T14:15:25.720 回答