我有一个非常慢的SQL语句,我相信我可以使用条件count()语句进行优化,但我无法解决如何执行此操作。更高效的SQL从多个表中计数
SELECT TOP 10 U.UserID,
U.Fullname,
U.URL,
U.Fname,
U.ProfilePic,
(SELECT Count(ResourceID)
FROM resources R
WHERE R.UserID = U.UserID) AS ResourcesPosted,
(SELECT Count(JobID)
FROM Jobs J
WHERE J.UserID = U.UserID) AS JobsPosted,
(SELECT Count(AuditID)
FROM Audit_Trail AT
WHERE AT.UserID = U.UserID
AND TYPE = 1
AND Entry LIKE '%logged in%') AS TotalLogins,
(SELECT Count(EventID)
FROM Future_Events_Listing E
WHERE E.UserID = U.UserID) AS EventsPosted
FROM User_basics U
LEFT JOIN Pod_Membership PM ON PM.userID = U.UserID
WHERE PodID = 268
我可以做一些内部连接,然后有条件地计数项目?
Pod_Membership表中的“PodID”?如果是这样的话,'LEFT JOIN'应该是'INNER JOIN',因为WHERE将它变成这样。 – strickt01
@ strickt01谢谢,我现在已经这么做了。 – chris
UserID是否在您正在执行COUNT表的表上编制索引 - 这是您的可能问题?如果除了UserID之外的其他表之间没有关联,那么除了'WHERE'子句中已经存在的'COUNT'外,没有关于'COUNT'的任何条件 - 即UserID。 – strickt01