Bonjour,
Est ce que le SQL dynamique permet d'ameliorer l performance? et comment?
Bonjour,
Est ce que le SQL dynamique permet d'ameliorer l performance? et comment?
Bonjour,
Ceci répond-t-il a votre besoin ?
(Pensez à développer vos besoins/demandes.)
Cordialement,
![]()
« Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
- Confucius -
Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
Tous les cours Office
Solutions d'Entreprise
![]()
A requête équivalente non.
Mal codé il détruit les performances en plus d'être source d'injection SQL.
Le SQL dynamique permet d'exécuter une requête construite dynamiquement à partir d'une chaîne (une concaténation de chaînes) de caractères comme fonctionnent les language client (php, java...)
Voici un exemple où l'approche sql dynamique permet un gain de performance comparée à l'approche sql statique :
Making a genric search sql Query
skuatamad; le document lié est trés long de façon que j ai pas pu trouvé mon besoin:
aussi, j ai pas compris ce que t'as ecris:
A requête équivalente non.
Mal codé il détruit les performances en plus d'être source d'injection SQL.
En PL/SQL, avant Oracle 10g le SQL dynamique était toujours moins performant que le SQL statique. Suite aux divers optimisations apportées au PL/SQL à partir d’Oracle 10g il n’y plus une différence notable entre les requêtes dynamiques et statiques. Néanmoins utiliser du SQL dynamique à la place du SQL statique dans PL/SQL est une erreur au moins pour le fait qu’il détruit le mécanisme des dépendances.
merci mnitu,
mais j ai pas compris:
Néanmoins utiliser du SQL dynamique à la place du SQL statique dans PL/SQL est une erreur au moins pour le fait qu’il détruit le mécanisme des dépendances.
Le SQL Statique (PL/SQL) a l'avantage d'utiliser automatiquement les "bind variables". Il est fait ainsi. Un genre "d'auto binding" est introduit dans le moteur PL/SQL statique si bien que tout ce que vous mettez comme variable, en dur ou pas, elle sera "re-bindée" (Désolé pour les termes en anglais). Vous avez donc l'énorme avantage de soulager la mémoire (library cache du shared pool) sans déployer d'effort spécifique à ce sujet. Par contre, lorsque vous utilisez du SQL Dynamique dans du PL/SQL (procédure), vous devez vous même veiller à la bonne utilisation des "bind-variables". Ce qui ôte déjà un sérieux avantage par rapport au SQL statique.
De plus, qui dit SQL dynamique dit peut-être une faille dans la sécurité à cause du SQL injection. D’une manière générale, moi je conseille de:
- N’utiliser le SQL dynamique que lorsque le SQL statique n’est pas possible
- Lorsque vous utilisez le SQL dynamique veillez à bien utiliser les variables de liaison (ouf j’ai fini par utiliser le terme en français)
- Lorsque vous utilisez le SQL dynamique faites attention au SQL injection (utilisation des concaténations et absence de variables de liaison)
- Lorsque vous utilisez le SQL dynamique pensez à tracer le texte du code SQL généré avant son utilisation. Il vous sera très facile de débugger les différentes erreurs obtenues lors de l’exécution et non lors de la compilation
cursor sharing and bind variable
Partager