So bin ich ziemlich neu in SQL und wurden mit der Überarbeitung/Dokumentation von Programmen bei meinem aktuellen Praktikum beauftragt.Vorteil zu SELECT SELECT DISTINCT zu SELECT
auf die Jagd schneiden, ich auf einem Tisch die folgende Abfrage leite:
SELECT COUNT(*) as NumofAccounts
FROM Accounts
WHERE Deleted = 0
AND Account_ID In (SELECT DISTINCT Account_ID FROM Tasks WHERE Deleted = 0);
, die ein Ergebnis von NumofAccounts = 18.
jedoch die ursprüngliche Abfrage war ergibt:
SELECT COUNT(*) as NumofAccounts
FROM Accounts
WHERE Deleted = 0
AND Account_ID In (SELECT Account_ID FROM Tasks WHERE Deleted = 0);
Diese beiden Abfragen ergeben NumofAccounts = 18, wenn Sie jedoch diesen Teil der Abfrage isolieren:
SELECT Account_ID FROM Tasks WHERE Deleted = 0;
Es gibt 736 Zeilen mit Ergebnissen, von denen viele doppelte Account_IDs sind.
Aber wenn man fügt DISTINCT:
SELECT DISTINCT Account_ID FROM Tasks WHERE Deleted = 0;
Es gibt nur 18 Zeilen von Ergebnissen, die mit den NumofAccounts Halsen.
Gibt es eine Möglichkeit, die Laufzeit- oder Effizienzdiskrepanz zwischen diesen beiden Abfragen zu analysieren?
Entschuldigung für die langatmige Post!
Die 'DISTINCT' wird aufgrund der automatischen Erstellung eines In-Memory-Index auf 'Account_ID' langsamer arbeiten. Es ist nicht notwendig, 'DISTINCT' in Kombination mit einer' IN'-Anweisung zu verwenden. –
Als Referenz sehen Sie sich die geschätzten und tatsächlichen Ausführungspläne für Abfragen an: [(MSDN: Ausführungspläne)] (https://msdn.microsoft.com/en-us/library/ms189562 (v = sql.105) .aspx), mit dem Sie die von Ihnen benötigte Analyse durchführen können. –
@ChrisPickford sie sind logisch identische Abfragen, die Abfrage-Engine kann wahrscheinlich arbeiten und identische Pläne für beide generieren. – Caleth