[SQL] De l'utilité des requêtes préparées

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [SQL] De l'utilité des requêtes préparées

par jojolapine » 21 janv. 2009, 22:20

Ok donc bon autant ne pas les utiliser ces requêtes préparées....
La méthode quote() sera surement plus rapide... :?
Moi j'ai pas peur ( ;) ) des requêtes ma protégées, j'utilsie toujorus quote quand il faut... donc bon
A moins de rendre la connexion persistante? est-ce que celà gardera le cache de requête?
j'attend d'autres retours d'utilisateurs ;)
merci à vous en tout cas!

par naholyr » 21 janv. 2009, 09:00

Du coup les requêtes préparées n'ont absolument aucun intérêt dans MySQL à part l'échappement des données en effet :? Parce que bon, en général dans le même script on ne fait pas deux fois la même requête puisqu'on s'arrange pour garder le résultat de la première en mémoire...

par stopher » 21 janv. 2009, 08:53

Salut ,

A mon avis ... , si tu utilises ta requete préparé une seule fois ... le seul intéret est alors la sécurité , car les requetes préparés sécurisent d'avantage contre les injections .. ( en fait elles évitent surtout les oublis d'échappements ).

Ensuite , au niveau du cache , il me semble qu'il n'y est que la requête compilée en mémoire , pas le résultat de celle-ci .

Donc :
Est-il utile de préparée une requête "statique" (genre: SELECT idProd,nomProd FROM tableProd)
Non , sauf si tu l'utilises plusieurs fois .. celà peut avoir un tt petit impact ,niveau perf


Quelle est la "portée" du cache de requête?
Selon la doc mysql par exemple .. je ne parle donc pas des autres SGBD ( à chercher donc ) :

http://dev.mysql.com/doc/refman/5.0/fr/sqlps.html

Voilà ce qui est dit : Si vous quittez la session client sans libérer les commandes préparées, le serveur le fera pour vous.

Donc , à premiere vue , à la fin de ton script , normalement , tes requêtes préparés seront détruites ... elle devrons donc être recompilées à la prochaine connexion

par naholyr » 21 janv. 2009, 08:40

De ce que j'ai compris avec Oracle, le fonctionnement est le suivant :
- tu demandes au système de "préparer" une requête du style "SELECT * FROM tb WHERE ch1 = :1 AND ch2 = :2"
- à ce moment là il prépare les données pour être facilement récupérées selon ces deux critères ch1+ch2 (en gros, il crée une vue avec un index optimisé sur ces champs)
- il va alors chercher les données grâce à cet index, ce qui va beaucoup plus vite et prend moins de mémoire (dans les cas de jointures, il ne va pas consulter n tables mais seulement le résultat de la préparation).
- les prochaines requêtes que tu lui demanderas de préparer avec la même forme (memes tables, et mêmes champs concernés) auront leur résultat directement issu de cette préparation, et seront donc immédiatement résolues.


De manière générale, les experts Oracle m'ont tous dit "TOUTES les requêtes doivent être "bindées" (c'est l'équivalent de préparer), on n'y perd pas grand chose à la première requête, et par contre on y gagne énormément pour toutes les suivantes".
Je ne sais pas si ce conseil est valable sur toutes les BDD mais j'imagine que c'est du même ordre ;)


Edit : j'ai tapé un peu à côté de la réponse attendue, donc pour rencentrer je dirais que non, ça n'a pas d'intérêt a priori de préparer une requête sans paramètre, mais comme ça n'aura normalement aucun impact négatif non plus, autant le faire aussi ;)

[SQL] De l'utilité des requêtes préparées

par jojolapine » 21 janv. 2009, 00:53

Bonsoir à tous,
Je cherche à avoir quelques information au sujet des requêtes préparées...
Je cherche à savoir ce qui se passe côté cache et performances...

dans le désordre:

Est-il utile de préparée une requête "statique" (genre: SELECT idProd,nomProd FROM tableProd)
Quelle est la "portée" du cache de requête?
ex: si on a par exemple un fichier qui contient seulement une requête préparée d'update d'une table
(genre: UPDATE tableProd SET prodQuantity=:quantity WHERE idProd=:id)
Et que ce fichier est appelé périodiquement (de toutes les secondes à une fois par heure).
Le cache va t'il fonctionné?

Bon vous avez à peu près compris où je voulais en venir?
Merci d'avance ;)