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.

OriginalL'auteur Pradeep Kumar | 2016-02-25