帮助明确!

时间:2010-07-29 17:12:09

标签: sql sql-server tsql

我有点困惑我是否应该使用nested Subquery或JOINS distinct !! 哪一个会表现得更好更快?

在没有distinct的情况下执行此查询的任何建议?!?

SELECT distinct TOP(20) e.*, u1.UserName As Sender,
u2.UserName As Receiver, u1.Avatar AS SenderPic  
FROM Friends f INNER JOIN Users u 
ON(u.Id = f.SenderId OR u.Id = f.ReceiverId) AND State = 'ok' 
INNER JOIN Events e 
ON(f.SenderId = e.SenderId OR f.SenderId = e.ReceiverId 
OR f.ReceiverId = e.SenderId OR f.ReceiverId = e.ReceiverId) 
INNER JOIN Users u1 
ON (e.SenderId = u1.Id) 
INNER JOIN Users u2 
ON (e.ReceiverId = u2.Id) 
WHERE u.Id = @id;

2 个答案:

答案 0 :(得分:2)

OR条件中的INNER JOIN会降低速度,但最终知道哪种方法最快,这在很大程度上取决于每个表中的行数。我建议尝试两者进行比较。

答案 1 :(得分:0)

这取决于DBMS。我在Oracle上的经验是没有太大区别,但您可以使用SQL Explain语句来衡量成本。在您的SELECT上,您必须在所有Id上设置索引。此外,我不太清楚为什么你需要完全不同,但要判断这一点,我需要知道整个数据库模型的基数。