it-swarm.com.de

Unterabfrage vs Inner Join in SQL Server

Ich habe folgende Fragen

Erste mit innerer Verknüpfung

SELECT item_ID,item_Code,item_Name 
FROM [Pharmacy].[tblitemHdr] I 
    INNER JOIN  EMR.tblFavourites F ON I.item_ID=F.itemID
WHERE F.doctorID = @doctorId AND F.favType = 'I'

zweite mit Unterabfrage wie

SELECT item_ID,item_Code,item_Name from [Pharmacy].[tblitemHdr]
WHERE item_ID IN
(SELECT itemID FROM EMR.tblFavourites
WHERE doctorID = @doctorId AND favType = 'I'
)

In dieser Artikeltabelle [Pharmacy].[tblitemHdr] Enthält 15 Spalten und 2000 Datensätze. Und [Pharmacy].[tblitemHdr] enthält 5 Spalten und ca. 100 Datensätze. In diesem Szenario which query gives me better performance?

34
Nithesh

Normalerweise funktionieren Joins schneller als interne Abfragen, in Wirklichkeit hängt dies jedoch vom von SQL Server generierten Ausführungsplan ab. Unabhängig davon, wie Sie Ihre Abfrage schreiben, wandelt SQL Server sie immer in einen Ausführungsplan um. Wenn es "intelligent" genug ist, um aus beiden Abfragen den gleichen Plan zu generieren, erhalten Sie das gleiche Ergebnis.

hier und hier einige hilfreiche Links.

30
Diego

In SQL Server Management Studio können Sie "Client Statistics" und auch Include Actual Execution Plan aktivieren. Auf diese Weise können Sie die Ausführungszeit und die Auslastung jeder Anforderung genau kennen.

Reinigen Sie den Cache auch zwischen den einzelnen Anforderungen, um Cache-Nebeneffekte auf die Leistung zu vermeiden

USE <YOURDATABASENAME>;
GO
CHECKPOINT;
GO
DBCC DROPCLEANBUFFERS;
GO

Ich denke, es ist immer am besten, mit eigenen Augen zu sehen, als sich auf die Theorie zu verlassen!

12
Arno 2501

Unterabfrage Vs Join

Tabelle eins 20 Zeilen, 2 Spalten

Tabelle zwei 20 Zeilen, 2 Spalten

unterabfrage 20 * 20

20 * 2 beitreten

logisch, korrigieren

Detailliert

enter image description here

enter image description here

Die Anzahl der Scans zeigt den Multiplikationseffekt an, da das System immer wieder Daten abrufen muss. Schauen Sie für Ihre Leistungsmessung einfach auf die Uhrzeit

5
user4584103

join ist schneller als Unterabfrage.

unterabfrage sorgt für ausgelasteten Festplattenzugriff. Denken Sie an die Lese-/Schreibnadel (Kopf?) der Festplatte, die beim Zugriff vor und zurück geht: Benutzer, SearchExpression, PageSize, DrilldownPageSize, Benutzer, SearchExpression, PageSize, DrilldownPageSize, Benutzer ... und so weiter auf.

bei Verknüpfungsvorgängen wird die Operation auf das Ergebnis der ersten beiden Tabellen konzentriert. Bei nachfolgenden Verknüpfungen wird die Verknüpfung auf das Ergebnis der ersten verknüpften Tabellen im Arbeitsspeicher (oder zwischengespeichert auf der Festplatte) konzentriert. Geringere Lese-/Schreibbewegung der Nadel, dadurch schneller

Quelle: hier

5
Paz

Die erste Abfrage ist besser als die zweite Abfrage. Die erste Abfrage verknüpft beide Tabellen. und überprüfen Sie auch den EXPLAIN-Plan für beide Abfragen ...

1
murali krishna

Alles hängt von den Daten und der relationalen Zuordnung zwischen Tabellen ab. Wenn die RDBMS-Regeln nicht befolgt werden, ist auch die erste Abfrage beim Ausführen und Abrufen von Daten langsam.

0
ammad khan