Question

J'ai deux questions que je UNIONing ensemble ce que je sais déjà qu'il n'y aura pas d'éléments dupliqués entre les deux requêtes. Par conséquent, UNION et UNION ALL produiront les mêmes résultats.

Lequel dois-je utiliser?

Était-ce utile?

La solution

Vous devez utiliser celui qui correspond à l'intention de ce que vous recherchez. Si vous voulez vous assurer qu'il n'y a pas de doublons utiliser UNION, sinon utilisez UNION ALL. Tout simplement parce que vos données produiront les mêmes résultats actuellement ne signifie pas qu'il sera toujours.

Cela dit, UNION ALL sera plus rapide sur toute implémentation de base de données saine d'esprit, voir les articles ci-dessous des exemples. Mais en général, ils sont les mêmes, sauf que UNION effectue une étape supplémentaire pour supprimer des lignes identiques (comme on pouvait s'y attendre), et il peut avoir tendance à dominer le temps d'exécution.

Autres conseils

Je vois que vous avez balisé cette performance question, donc je suppose que c'est votre principale considération.

UNION ALL sera UNION absolument surperformer depuis SQL ne dispose pas de vérifier les deux ensembles pour dups.

Sauf si vous avez besoin de SQL pour effectuer la vérification en double pour vous, utilisez toujours UNION ALL.

Selon http://blog.sqlauthority.com/2007/03/10/sql-server-union-vs-union-all-which-is-better-for-performance/ au moins pour performances, il est préférable d'utiliser UNION ALL, car il ne doublons pas activement distinctes et en tant que tel est plus rapide

J'utiliser UNION ALL de toute façon. Même si savent que il ne va pas être en double, en fonction de votre moteur de serveur de base de données, il pourrait ne pas savoir cela.

Alors, juste pour fournir des informations supplémentaires au serveur DB, pour son planificateur de requêtes un meilleur choix (probablement), l'utilisation UNION ALL.

Cela dit, si votre serveur DB planificateur de requêtes de "est assez intelligent pour en déduire que l'information à partir des indices de clause de UNION et de table, puis les résultats (performance et sage sémantique) devrait être le même.

Les deux cas, il dépend fortement de la serveur DB que vous utilisez.

Comme il n'y aura pas de doublons de deux utilisation UNION ALL. Vous n'avez pas besoin de vérifier les doublons et UNION ALL sera préformer la tâche plus efficacement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top