dans t-sql Qu'est-ce qui est plus rapide?
DELETE * FROM ... WHERE A = x OR A = y OR A = z
9 Réponses :
Ce doit être exactement égal. La plupart des transaltes RDMBS Bien sûr, si vous envisagez de la traduction de Mise à jour: strong> J'envisage que dans CODE> TO
ORS CODE>. P>
ins code> à
ou de code> pour prendre beaucoup de temps, la phrase avec
ou est plus rapide; - ) p>
a code> est une colonne. p>
Si A code> est un calcul, il sera effectué une fois en utilisant
dans code> et n fois les temps en utilisant
ou code>. p>.
"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. P>
Beaucoup de nettoyant à utiliser "In" à mon avis, en particulier dans des requêtes plus vastes, cela le rend beaucoup plus lisible. P>
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 i> ê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.
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 em> qui est plus rapide dans votre situation. P>
+1 Merci de sauvegarder ce que j'essaie de me dire moi-même. :-)
Écrivez deux procédures stockées, une utilisation 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. P> dans code>, l'autre à l'aide de
ou code> sur un serveur de test. Exécutez chaque procédure de 10 000 (ou 1 000 000, ou autre) fois, et comparez les horaires. P>
in SQL Server code>, l'optimiseur générera des plans identiques pour ces requêtes. P>
Ils devraient générer le même plan exact de mon expérience p>
Regardez le plan p>
Peu importe si A est un calcul ou une colonne, on dirait que SQL Server 2005 se convertit vers ou des clauses. P>
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.
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. P> Vous pouvez également ajouter une clause optionnelle. P> P>