J'ai récemment vu la question "où 1 = 1 déclaration" ; une construction SQL que j'ai souvent utilisée dans la construction de SQL dynamique dans le but d'écrire du code plus propre (du point de vue du langage hôte).
De manière générale, cet ajout à un énoncé SQL affecte-t-il négativement les performances des requêtes? Je ne cherche pas de réponse concernant un système de base de données spécifique (parce que je l'ai utilisé dans DB2, SQL Server, MS-Access et mysql) - à moins qu'il soit impossible de répondre sans entrer dans les détails.
performance
optimization
transistor1
la source
la source
1=1
WHILE 1=1
clause. Cependant, il ne semble pas avoir d'impact décelable sur le temps d'exécution.Réponses:
À ma connaissance, tous les principaux SGBDR ont intégré des évaluations constantes. Cela devrait être évalué à peu près instantanément dans chacun d'eux.
la source
Du point de vue de SQL Server, si vous faites le
WHERE 1=1
pour permettre le passage dynamique des paramètres et ignorer un paramètre d'être évalué, je vous suggère de lire quelques articles de SQL Server MV Erland Sommarskog. Son approche supprime la nécessité de faire d'autres astuces à l'intérieur du SQL dynamique (comme laWHERE Column = Column
construction ou l'utilisation d'uneWHERE (Col = Val OR 1=1) and (Col2 = Val2 OR 1=1)
construction). Le 1 = 1 ne devrait pas causer de problèmes de performance comme l'a mentionné @JNK (j'ai +1 sur sa réponse et c'est celle qui devrait être acceptée), je pense que vous trouverez de bons conseils dans l'article d'Erland autour de Dynamic SQL et vous verrez également qu'il utilise toujours celui1=1
pour les cas où aucun paramètre n'est passé mais il les évite pour les paramètres individuels qui ne sont pas passés, il ne le fait tout simplement pasla source
Avec MySQL, vous pouvez vérifier, en exécutant EXPLAIN EXTENDED et plus tard AFFICHER LES AVERTISSEMENTS pour voir la requête réelle. tl; dr: il est optimisé.
la source
In older MySQL releases, extended information was produced using EXPLAIN EXTENDED. That syntax is still recognized for backward compatibility but extended output is now enabled by default, so the EXTENDED keyword is superfluous and deprecated. Its use results in a warning, and it will be removed from EXPLAIN syntax in a future MySQL release.
Il a été supprimé dans MySQL v 8.0.