Mysql
 sql >> Base de données >  >> RDS >> Mysql

Qu'est-ce que cela signifie quand je dis que l'instruction préparée est pré-compilée ?

Lorsque vous utilisez une instruction préparée (c'est-à-dire une instruction précompilée), dès que la base de données reçoit cette instruction, elle la compile et la met en cache afin qu'elle puisse utiliser la dernière instruction compilée pour des appels successifs de la même instruction. Il devient donc pré-compilé pour des appels successifs.

Vous utilisez généralement une instruction préparée avec des variables de liaison où vous fournissez les variables au moment de l'exécution. Maintenant, que se passe-t-il pour l'exécution successive d'instructions préparées, vous pouvez fournir les variables qui sont différentes des appels précédents. Du point de vue de la base de données, il n'est pas nécessaire de compiler l'instruction à chaque fois, il insérera simplement les variables de liaison au moment du rhum. Alors devient plus rapide.

Les autres avantages des relevés préparés sont :-

1) protection contre les attaques par injection SQL

2) Plus rapide pour les appels successifs des mêmes déclarations

Comment ça marche :-

  1. La précompilation est effectuée par la base de données. Certaines bases de données plus simples ne précompilent pas du tout les instructions. D'autres peuvent le précompiler lors de l'appel de prepareStatement, et d'autres encore peuvent le faire lorsque execute est appelé pour la première fois sur l'instruction, en tenant compte des valeurs des paramètres lors de la compilation (création d'un plan pour) l'instruction.

  2. Les bases de données qui précompilent les instructions les mettent généralement en cache, donc ps1 ne sera probablement pas compilé à nouveau. Certains pilotes JDBC (par exemple, ceux d'Oracle) mettent même en cache les instructions préparées, de sorte qu'ils ne l'ont pas réellement fermé lorsque ps.close() a été appelé.

  3. Les bases de données mettent généralement en cache les instructions jusqu'à ce que quelque chose les expulse du cache.

Pour plus de détails, consultez ce wiki lien