我有点困惑我是否应该使用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;
答案 0 :(得分:2)
OR
条件中的INNER JOIN
会降低速度,但最终知道哪种方法最快,这在很大程度上取决于每个表中的行数。我建议尝试两者进行比较。
答案 1 :(得分:0)
这取决于DBMS。我在Oracle上的经验是没有太大区别,但您可以使用SQL Explain语句来衡量成本。在您的SELECT上,您必须在所有Id上设置索引。此外,我不太清楚为什么你需要完全不同,但要判断这一点,我需要知道整个数据库模型的基数。