sql >> Database >  >> RDS >> Mysql

Wat betekent het als ik zeg dat de voorbereide verklaring vooraf is gecompileerd?

Wanneer u een voorbereide instructie gebruikt (d.w.z. een vooraf gecompileerde instructie), compileert DB deze instructie en slaat deze op in de cache, zodat deze de laatst gecompileerde instructie kan gebruiken voor opeenvolgende aanroep van dezelfde instructie. Het wordt dus voorgecompileerd voor opeenvolgende aanroepen.

Over het algemeen gebruikt u een voorbereide instructie met bindvariabelen waarbij u de variabelen tijdens runtime opgeeft. Wat er nu gebeurt voor de opeenvolgende uitvoering van voorbereide instructies, u kunt de variabelen opgeven die verschillen van eerdere aanroepen. Vanuit het oogpunt van DB hoeft het de instructie niet elke keer te compileren, maar voegt het gewoon de bindvariabelen in op rum-tijd. Wordt dus sneller.

Andere voordelen van voorbereide verklaringen zijn:-

1)bescherming tegen SQL-injectie-aanvallen

2) Sneller voor opeenvolgende oproepen van dezelfde verklaringen

Hoe het werkt:-

  1. Precompilatie wordt gedaan door de database. Sommige eenvoudigere databases precompileren helemaal geen instructies. Anderen kunnen het precompileren bij de aanroep prepareStatement, en weer anderen kunnen het doen wanneer execute voor het eerst wordt aangeroepen op de instructie, waarbij rekening wordt gehouden met de waarden van de parameters bij het compileren (maken van een plan voor) de instructie.

  2. Databases die instructies vooraf compileren, cachen ze meestal in de cache, dus naar alle waarschijnlijkheid zal ps1 niet opnieuw worden gecompileerd. Sommige JDBC-stuurprogramma's (bijv. die van Oracle) cachen zelfs voorbereide instructies in de cache, dus ze hebben het niet echt gesloten toen ps.close() werd aangeroepen.

  3. Databases cachen over het algemeen statements totdat iets ze uit de cache verdrijft.

Ga voor meer informatie naar deze wiki link



  1. Wat is de beste manier om rangen te genereren in MYSQL?

  2. Tabel-ID ophalen na invoegen met ColdFusion en MySQL

  3. Aanhoudende UUID in PostgreSQL met behulp van JPA

  4. Kun je een For Each Row-lus maken met MySQL?