Ich habe eine sehr langsame SQL-Anweisung, die ich mit bedingten count() -Anweisungen optimieren kann, aber ich kann nicht herausfinden, wie dies zu tun ist.Effizientere SQL zum Zählen von mehreren Tabellen
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
Könnte ich eine Art innerer Verbindung machen und dann die Elemente bedingt zählen?
Ist 'PodID' in der' Pod_Membership' Tabelle? Wenn dies der Fall ist, sollte der "LINKE VERBINDUNGSBEGINN" ein "INNERER VERBINDUNGSBEREICH" sein, da der "WHERE" -Bestandteil dies ohnehin ist. – strickt01
@ strickt01 danke, das habe ich jetzt gemacht. – chris
Ist die Benutzer-ID in den Tabellen indiziert, in denen Sie den COUNT-Befehl ausführen, was ist Ihr wahrscheinliches Problem? Wenn zwischen den anderen Tabellen keine Verknüpfung besteht, auf die Sie sich als Benutzer-ID verlassen, dann gibt es keine Bedingung für den "COUNT", den Sie anwenden können, außer dem bereits in der WHERE-Klausel - d. H. UserID. – strickt01