7
votes

Qu'est-ce qui est plus rapide dans ou ou?

dans t-sql Qu'est-ce qui est plus rapide?

DELETE * FROM ... WHERE A = x OR A = y OR A = z


0 commentaires

9 Réponses :


0
votes

Ce doit être exactement égal. La plupart des transaltes RDMBS dans TO ORS .

Bien sûr, si vous envisagez de la traduction de ins à ou de pour prendre beaucoup de temps, la phrase avec ou est plus rapide; - )

Mise à jour: J'envisage que a est une colonne.


0 commentaires

1
votes

Si A est un calcul, il sera effectué une fois en utilisant dans et n fois les temps en utilisant ou . .


0 commentaires

12
votes

"in" sera traduit en une série de "ou" s ... Si vous regardez le plan d'exécution pour une requête avec "In", vous verrez qu'il l'a étendue.

Beaucoup de nettoyant à utiliser "In" à mon avis, en particulier dans des requêtes plus vastes, cela le rend beaucoup plus lisible.


5 commentaires

Thnx, dans le plan d'exécution, j'ai vu que cela coûterait exactement la même quantité de temps de la CPU.


Ce n'est pas vrai. IN n'est pas traduit comme une sérisie des ours. Vous seriez mieux pour profiler votre requête et voir en réalité le résultat. Le plus souvent, il n'existe pas plus rapidement que dans. Mais devrait être plus rapide que les deux. Cela dépend des index cependant.


@Frank, nous parlons d'INS avec des listes de valeurs et non des sous-requêtes.


@Andrew: Alors je suis évidemment mal à propos de l'existence de l'existence. Mais je comprends toujours que dans et sont intériorisés différemment par SQL Server - Sous-requête ou valeurs constantes.


Dans ce scénario, ils sont les mêmes.



14
votes

ne pense pas; Profil.

Je vous exhorte à ne pas compter sur l'intuition, les vôtres ou de quelqu'un d'autre, lorsque vous envisagez des questions de vitesse. Au lieu de cela, essayez les deux options, avec une sorte de mesure du temps de profilage / d'exécution, et découvrez qui est plus rapide dans votre situation.


1 commentaires

+1 Merci de sauvegarder ce que j'essaie de me dire moi-même. :-)



4
votes

Écrivez deux procédures stockées, une utilisation dans , l'autre à l'aide de ou sur un serveur de test. Exécutez chaque procédure de 10 000 (ou 1 000 000, ou autre) fois, et comparez les horaires.

En général, c'est à peu près le «seul» moyen d'avoir une bonne réponse à la question de savoir quelle approche est plus rapide: écrivez des cas de test de synchronisation simples et de les exécuter de nombreuses fois.


0 commentaires

3
votes

in SQL Server , l'optimiseur générera des plans identiques pour ces requêtes.


0 commentaires

2
votes

Ils devraient générer le même plan exact de mon expérience

Regardez le plan


0 commentaires

1
votes

Peu importe si A est un calcul ou une colonne, on dirait que SQL Server 2005 se convertit vers ou des clauses.


1 commentaires

Cela pourrait également la convertir en une jointure, dans le cas où le contenu de votre dans est les résultats d'une autre déclaration de sélection.



1
votes

Le serveur Absolute le plus rapide sous SQL est d'utiliser une suppression avec une jointure intérieure. Avec trois valeurs, vous remarquerez la différence, mais avec plus de valeurs (nous faisons plusieurs milliers) La différence est phénomine. Vous pouvez bloquer vos valeurs dans une table temporay puis rejoindre cela.

E.g. xxx

Vous pouvez également ajouter une clause optionnelle.


0 commentaires