Sous-requête v/s inner join dans sql server

j'ai requêtes suivantes

premier utilisant la jonction intérieure

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'

deuxième à l'aide de sous-requêtes comme

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'
)

dans ce tableau [Pharmacy].[tblitemHdr] contient 15 colonnes et 2000 enregistrements. Et [Pharmacy].[tblitemHdr] contient 5 colonnes et environ 100 enregistrements. dans ce scénario which query gives me better performance?

26
demandé sur valex 2012-12-27 13:48:46

5 réponses

les jointures fonctionneront généralement plus rapidement que les requêtes internes, mais en réalité cela dépendra du plan d'exécution généré par le serveur SQL. Peu importe comment vous écrivez votre requête, SQL Server la transformera toujours sur un plan d'exécution. Si c'est "smart" assez pour générer le même plan des deux requêtes, vous obtiendrez le même résultat.

Ici et ici quelques liens pour vous aider.

26
répondu Diego 2012-12-27 10:03:06

dans Sql Server Management Studio vous pouvez activer " statistiques clients "et aussi inclure le plan D'exécution réelle . Cela vous donnera la possibilité de connaître précisément le temps d'exécution et la charge de chaque demande.

également entre chaque requête nettoyer le cache pour éviter l'effet secondaire du cache sur les performances

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

je pense qu'il est toujours préférable de voir de nos propres yeux que de s'en remettre à la théorie !

11
répondu Arno 2501 2012-12-27 09:55:16

jointure est plus rapide que subquery.

sousquery rend pour l'accès disque occupé, pensez à l'aiguille de lecture-écriture du disque dur(tête?) qui va et vient quand il accède: User, SearchExpression, PageSize, DrilldownPageSize, User, SearchExpression, PageSize, DrilldownPageSize, User... et ainsi de suite.

joindre les œuvres, par la concentration de l'opération sur le résultat des deux premières tables, les jointures serait de se concentrer le rejoindre sur la mémoire(ou mis en cache sur le disque) résultat de la première table jointe, et ainsi de suite. moins de mouvement d'aiguille en lecture-écriture, donc plus rapide

Source: Ici

5
répondu Paz 2017-05-23 12:01:59

Sous-requête Vs Rejoindre

Tableau 20 lignes,2 colonnes

Tableau de 20 lignes,2 colonnes

sous-requête 20*20

join 20*2

logique, rectifier

détaillé

enter image description here

enter image description here

le nombre de scans indique l'effet de multiplication car le système devra passer encore et encore pour récupérer des données, pour votre mesure de performance, il suffit de regarder l'heure

4
répondu Pierre.Vriens 2016-05-15 21:04:34

la première requête est meilleure que la seconde.. parce que la première requête nous rejoignons les deux tables. et aussi vérifier le plan expliquer pour les deux requêtes...

1
répondu murali krishna 2012-12-27 09:56:54