sql >> Databasteknik >  >> RDS >> Mysql

Vad betyder det när jag säger att det förberedda uttalandet är förkompilerat?

När du använder förberedd sats (dvs förkompilerad sats), så snart DB får denna sats, kompilerar den den och cachar den så att den kan använda den senast kompilerade satsen för successiva anrop av samma sats. Så den blir förkompilerad för på varandra följande samtal.

Du använder vanligtvis förberedd sats med bindningsvariabler där du tillhandahåller variablerna vid körning. Vad som nu händer för successiv exekvering av förberedda uttalanden, du kan tillhandahålla variabler som skiljer sig från tidigare anrop. Ur DB synvinkel behöver den inte kompilera uttalandet varje gång, utan kommer bara att infoga bindningsvariablerna vid rum tid. Så blir snabbare.

Andra fördelar med förberedda uttalanden är:-

1)skydd mot SQL-injektionsattack

2) Snabbare för på varandra följande anrop av samma uttalanden

Hur det fungerar :-

  1. Förkompilering görs av databasen. Vissa enklare databaser förkompilerar inte påståenden alls. Andra kanske förkompilerar det på prepareStatement-anropet, och andra kan göra det när execute först anropas på satsen, med hänsyn till parametrarnas värden när man kompilerar (skapar en plan för) satsen.

  2. Databaser som förkompilerar uttalanden cachelagrar dem vanligtvis, så med stor sannolikhet kommer ps1 inte att kompileras igen. Vissa JDBC-drivrutiner (t.ex. Oracles) cachelagrade till och med uttalanden, så de har faktiskt inte stängt det när ps.close() anropades.

  3. Databaser cachelagrar i allmänhet uttalanden tills något kastar dem från cachen.

För mer information gå igenom denna wiki länk



  1. Hur kontrollerar man om MySQL-tabellen är UTF-8 och har storageEngine InnoDB?

  2. Att hålla en applikationsdatabas agnostisk (ADO.NET vs inkapslande DB-logik)

  3. MySQL-motsvarighet till PostgreSQL:s dblink-modul?

  4. EXECUTE...USING-satsen i PL/pgSQL fungerar inte med posttyp?