UNION contre SELECT DISTINCT et l'UNION de TOUTES les Performances
Quelle est la différence entre les deux en terme de performance?
-- eliminate duplicates using UNION
SELECT col1,col2,col3 FROM Table1
UNION SELECT col1,col2,col3 FROM Table2
UNION SELECT col1,col2,col3 FROM Table3
UNION SELECT col1,col2,col3 FROM Table4
UNION SELECT col1,col2,col3 FROM Table5
UNION SELECT col1,col2,col3 FROM Table6
UNION SELECT col1,col2,col3 FROM Table7
UNION SELECT col1,col2,col3 FROM Table8
-- eliminate duplicates using DISTINCT
SELECT DISTINCT * FROM
(
SELECT col1,col2,col3 FROM Table1
UNION ALL SELECT col1,col2,col3 FROM Table2
UNION ALL SELECT col1,col2,col3 FROM Table3
UNION ALL SELECT col1,col2,col3 FROM Table4
UNION ALL SELECT col1,col2,col3 FROM Table5
UNION ALL SELECT col1,col2,col3 FROM Table6
UNION ALL SELECT col1,col2,col3 FROM Table7
UNION ALL SELECT col1,col2,col3 FROM Table8
) x
Emballage tout en un "DISTRICT" crée une table temporaire qui est (un peu) cher. Autre que cela, je ne vois pas pourquoi DISTICNT ... l'UNION de TOUS serait plus rapide que (distinctes) de l'UNION
À la fois de montrer les différents plans d'exécution, dans certains cas, mais même dans les autres, et c'est une grande confusion maintenant.
Je ne ferais confiance optimiseur de requête à la figure hors de l'union
Il n'y a pas de réponse unique. Il y a beaucoup de facteurs qui peuvent influer sur le plan de requête, y compris les colonnes de retour et que les indices sont en jeu. La meilleure approche est de vérifier le plan de requête sur une base de cas par cas.
À la fois de montrer les différents plans d'exécution, dans certains cas, mais même dans les autres, et c'est une grande confusion maintenant.
Je ne ferais confiance optimiseur de requête à la figure hors de l'union
Il n'y a pas de réponse unique. Il y a beaucoup de facteurs qui peuvent influer sur le plan de requête, y compris les colonnes de retour et que les indices sont en jeu. La meilleure approche est de vérifier le plan de requête sur une base de cas par cas.
OriginalL'auteur Pradeep Kumar | 2016-02-25
Vous devez vous connecter pour publier un commentaire.
La différence entre Union et de l'Union de tous les est que de l'UNION de TOUS les ne permettra pas d'éliminer les doublons de lignes, au lieu de cela, il tire juste toutes les lignes de toutes les tables, mise en place de votre requête spécificités et les combine dans une table.
Un UNION déclaration effectivement fait un SELECT DISTINCT sur l'ensemble de résultats.
Si vous sélectionnez Distincte de l'Union de Tous les jeu de résultats, Alors la sortie sera égal à l'Union de l'ensemble de résultats.
Edit:
Rendement sur le coût de l'UC:
Laissez-moi vous expliquer avec un Exemple:
J'ai deux requêtes. l'un est l'Union de l'autre est l'Union de Tous
Je n'ai couru les deux dans la même fenêtre de requête en SMS.
Permet de voir l' Plan d'Exécution en SMS:
Ce qui se passe, La requête avec de l'Union de Tous les et Distinctes prendra coût de l'UC plus de Requête avec Union.
Performance sur le Temps:
L'UNION DE TOUS:
De l'UNION:
Donc Union est beaucoup mieux que l'Union de Tous Distincts dans de performance
Ce qui se passe si, il ya environ 6 à 8 tables en jeu?
J'ai utilisé 11
UNION
/UNION ALL
et étonnamment, j'ai euUNION ALL
de travail plus rapide queUNION
. Avec un moindre nombre de tables, leUNION
semble être plus rapide. Pouvez-vous le vérifier?utilisez-vous la même table ou des tables différentes?
Si vous utilisez les mêmes tables, Il vous donne le même coût ou de l'Union de tous est plus rapide que de l'union. J'avais vérifié avec les 5 tables différentes, Encore que l'Union est plus rapide que l'union de tous.
OriginalL'auteur Sankar
Un autre point d'exemple qui illustre les quatre cas possibles:
OriginalL'auteur TonBill