2

Est-ce que SQL a une différence de performance entre ces deux instructions?Requête SQL Server: union Union vs Distinct toutes les performances

SELECT distinct 'A' as TableName, Col1, Col2, Col3 FROM A 
UNION ALL 
SELECT distinct 'B' as TableName, Col1, Col2, Col3 from B 

contre

SELECT 'A' as TableName, Col1, Col2, Col3 FROM A 
UNION 
SELECT 'B' as TableName, Col1, Col2, Col3 from B 

La différence entre cela et des questions similaires telles que UNION vs DISTINCT in performance est que je peux confirmer à l'avance que les tables individuelles, je suis à l'aide n'aura pas les doublons entre eux, seulement dans les tables individuelles.

Les plans d'exécution me semblent identiques, car ils trie les tables individuelles avant de les concaténer. Cependant, si j'enlève le scalaire à tous les deux, le plan de l'UNION ALL reste fondamentalement le même mais l'UNION change pour concaténer avant le distinct. Je vais concaténer environ 20 tables ensemble, et il n'est pas clair si faire 20 DISTINCT individuels est plus rapide que de faire un grand DISTINCT à la fin, puisque je peux encore confirmer que les tables ne partagent pas de doublons entre eux (seulement dans le même table).

+0

Mettez les deux requêtes en une session, activez le plan d'exécution et exécutez.Comparer les pourcentages dans le plan d'exécution réel – DimaSUN

+0

C'est quelque chose que j'ai fait, mais je n'avais que quelques milliers d'enregistrements à la fois - pas assez pour tester la différence de temps d'exécution total, sans parler du nombre de lignes, du nombre de colonnes, types de données des colonnes, etc, pour obtenir une réponse générale. Et comme je l'ai dit, les plans d'exécution que j'ai exécutés se ressemblaient. Même si ce n'était pas le cas, l'un qui descend et l'autre qui monte ne signifie rien en ce qui concerne le temps d'exécution total. – WakeflyCBass

Répondre

2

DISTINCT n'est pas nécessairement implémenté par tri, il peut également être implémenté par hachage.

Ces deux opérations consomment de la mémoire et la réduction de la taille des données peut aider à réduire la quantité de mémoire requise pour la simultanéité.

La complexité algorithmique du tri est n log n, ce qui signifie que le travail requis augmente de linearitmically à mesure que n augmente. Sur cette base, le tri de 10 ensembles plus petits de taille s devrait généralement être rapide que de trier un plus grand ensemble de taille 10*s.

0

Ne parlons pas de SQL pendant une minute.

Cas 1: Disons qu'il existe une liste de 100 nombres.

List: 1,2,3,4,....60 and then 61 repeats 40 times. 

La liste n'est pas disponible et vous ne le savez pas auparavant. Maintenant, vous essayez de rechercher les valeurs uniques, à partir de la liste de 100 numéros, puis les trier.

Cas 2: Comme vous l'avez dit, il existe deux listes sans doublon entre elles.

List 1: 1,2,3,4,....60 
List 2: 61,61,61,61... 40 times 

Il répond à la condition que vous avez mentionnée. Liste une, de même, a les numéros dans un ordre aléatoire. Mais maintenant, vous êtes à la recherche des valeurs uniques, dans la liste des 60 et non un ensemble plus large de 100 numéros et une autre liste où vous obtiendrez 61.

Venir à SQL, tout dépend de la taille de données que vous avez dans chaque tableau individuel, et peuvent être d'autres facteurs.

J'accepte que ce n'est pas une réponse complète, j'espère encore que cela aide.