我的查询持续运行13秒,始终如一:
SELECT COUNT(*) AS Counter
FROM Groups_Users gu
JOIN Groups g ON gu.GroupID = g.GroupID
WHERE (
(gu.UserID = 3 AND gu.IsAdmin = 1 AND g.GroupID = 395)
OR g.OrganizationID IN (
SELECT OrganizationID FROM Organizations_Users WHERE UserID = 3 AND IsAdmin = 1 )
)
向Groups_Users和Organization_Users添加索引后,它的时间不到1秒。所以,问题解决了,除了我希望这两个表中的记录数量增长很多。而且我想知道我的子选择和/或加入是否效率低下并且可以做得更好。也许在某些时候,当记录数从8,000增加到100,000时,性能会再次降低,因为子选择效率很低。
有关更好地进行此查询的任何想法吗?
答案 0 :(得分:1)
SELECT COUNT(*) AS Counter
FROM Groups_Users gu
JOIN Groups g ON gu.GroupID = g.GroupID
WHERE
(
( gu.UserID = 3
AND gu.IsAdmin = 1
AND g.GroupID = 395
)
OR EXISTS
( SELECT 1
FROM Organizations_Users ou
WHERE ou.UserID = 3
AND ou.IsAdmin = 1
AND ou.organizationid = g.organizationid
)
)
基本上你说选择1满足这些条件..如果它们是真的那么存在的查询是真的它将包括它。所以你要做的就是将AND ou.organizationid = g.organizationid
添加到子查询中,你很高兴