Sql join with join关键字与join with关键字有什么区别=
可能重复:Sql join with join关键字与join with关键字有什么区别=,sql,sql-server-2008,query-optimization,Sql,Sql Server 2008,Query Optimization,可能重复: 使用=运算符进行查询:- 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 p
使用=运算符进行查询:-
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
哪一个在执行上更好?在SQL 2008中,这几乎没有什么区别。(尽管我认为前一种方法可能会被弃用?) 然而,在许多SQL实现中,如果每个连接都有一个条件,那么后续的连接将使用更少的值进行连接,因此会稍微快一点 如果你把所有的条件都放在最后,那么这种优化直到最后才会发生。因此,您将得到一个庞大的行列表,这些行在一次过中被过滤,理论上,这将更慢 例如: 如果表A有1000行,而您用1000行连接到另一个表B,但指定int eh join条件,即您只连接到B中的10行,则您有10行。如果你接着加入表C,你将只加入10行 如果您将A到B连接到C,然后进行筛选,您将筛选1000行(或者可能是1000000行,具体取决于连接)
因此,出于跨实现兼容性和可读性的考虑,最好使用后一个版本。我更喜欢连接,我认为习惯于总是将连接条件放在ON子句中最有意义(除非它是外部连接,并且您确实希望它放在where子句中)因为它使任何阅读您的查询的人都能更清楚地了解表的连接条件,并且有助于防止WHERE子句长达几十行。由于其干净或隐式连接区域SQL反模式,请参见: