10
votes

Au syndicat ou à l'union tout, c'est la question

J'ai deux questions que je suis Union ensemble de telle sorte que je sache déjà qu'il n'y aura aucun élément en double entre les deux requêtes. Par conséquent, Union et Union Tout produira les mêmes résultats.

lequel dois-je utiliser?


0 commentaires

5 Réponses :


24
votes

Vous devez utiliser celui qui correspond à l'intention de ce que vous recherchez. Si vous voulez vous assurer qu'il n'y ait aucun doublon, Union , utilisez sinon utiliser Union tout . Ce n'est pas parce que vos données produiront les mêmes résultats en ce moment ne signifie pas que cela le fera toujours.

qui dit, Union Tout sera plus rapide sur toute implémentation de la base de données SANE, voir les articles ci-dessous pour des exemples. Mais typiquement, ils sont les mêmes sauf que Union effectue une étape supplémentaire pour éliminer les lignes identiques (comme on pouvait s'attendre à ce que cela puisse attendre de dominer l'heure d'exécution.


3 commentaires

Étant donné que les données sont tirées de deux tables non liées qui contiennent des GUIDS, je sais que les deux requêtes ne seront jamais dupliquées entre les deux requêtes.


@Mark - Ce n'est pas gaufrette, il répond à deux saveurs de la question. La principale question posée est "laquelle dois-je utiliser?" et la réponse est "Utilisez celui qui correspond à votre intention". La question implicite est "qui serait plus rapide d'utiliser?", Et la réponse il y a Union tout


@Billy Onealk Ok, c'est un cas où vous pourrez être extrêmement convaincu que les données qui ne produisent aucun doublure ne produiront pas toujours aucun doublage, au moins sur toute l'architecture que vous utilisez actuellement depuis que je doutez que vous épuissez l'espace GUID à tout moment. :)



2
votes

J'utiliserais Union tout de toute façon. Même si vous savez qu'il n'ya pas de duplicates, en fonction de votre moteur de serveur de base de données, cela pourrait ne pas savoir que.

Ainsi, juste pour fournir des informations supplémentaires à DB Server, afin que son planificateur de requête soit un meilleur choix (probablement), utilisez Union tout .

ayant dit que, si votre planificateur de requête DB Server S est suffisamment intelligent pour déduire que les informations de la clause Union et des index de table, des résultats (performances et sémantiques sage) devrait être la même.

Dans les deux cas, cela dépend fortement du serveur db que vous utilisez.


0 commentaires

2
votes

selon http://blog.sqlauthority.com/2007/03/10/sql-server-union-vs-union-all-Qui-is-better-for-performance/ au moins pour performance Il est préférable d'utiliser un syndicat tout, car il ne distingue pas activement des doublons et en tant que telle est plus rapide


0 commentaires

6
votes

Je vois que vous avez étiqueté cette question de questions, alors je suppose que c'est votre considération principale.

Union Tout surperformez-vous absolument Union puisque SQL n'a pas à vérifier les deux ensembles pour les DUPS.

Sauf si vous avez besoin de SQL pour effectuer la vérification duplicate pour vous, utilisez toujours Union tout .


2 commentaires

Je pense qu'il le sait déjà. Il demande spécifiquement dans le scénario qu'il sait (et probablement dB sait également) il ne va pas y avoir de DUPS.


Je ne comprends pas ton point. Demandez-vous: "Si SQL peut déterminer qu'il n'y aura jamais de chevauchements dans les deux ensembles, optimisera-t-il l'union de sorte qu'il n'a pas à comparer, ce qui le rendait de manière identique à union Tout ? Réponse: non. Utilisez Union tout



1
votes

Comme il n'y aura pas de doublons des deux utilisations de l'Union. Vous n'avez pas besoin de vérifier les doublons et le syndicat tout préférera la tâche plus efficacement.


0 commentaires