sql >> Databáze >  >> RDS >> Mysql

PHP PDO:jak opětovná příprava příkazu ovlivní výkon

MySQL (jako většina DBMS) ukládá plány provádění připravených příkazů do mezipaměti, takže pokud uživatel A vytvoří plán pro:

SELECT * FROM some_table WHERE a_col=:v1 AND b_col=:v2

(kde v1 a v2 jsou proměnné vazby) poté odešle hodnoty, které mají být interpolovány DBMS, poté uživatel B odešle stejný dotaz (ale s jinými hodnotami pro interpolaci), DBMS nemusí plán znovu generovat. tj. je to DBMS, kdo najde odpovídající plán - nikoli PDO.

To však znamená, že každá operace s databází vyžaduje alespoň 2 zpáteční cesty (první k předložení dotazu, druhé k předložení proměnných vazeb) na rozdíl od jedné zpáteční cesty pro dotaz s doslovnými hodnotami, pak to představuje další síťové náklady. . S dereferencováním (a údržbou) mezipaměti dotazů/plánů jsou také spojeny malé náklady.

Klíčovou otázkou je, zda jsou tyto náklady v první řadě vyšší než náklady na vytvoření plánu.

I když se (podle mých zkušeností) rozhodně zdá, že použití připravených příkazů s Oraclem je výkonnostní přínos, nejsem přesvědčen, že totéž platí pro MySQL – nicméně hodně bude záležet na struktuře vaší databáze a složitosti dotaz (nebo přesněji, kolik různých možností může optimalizátor najít pro vyřešení dotazu).

Zkuste to změřit sami (nápověda:možná budete chtít nastavit práh pomalého dotazu na 0 a napsat nějaký kód pro převod doslovných hodnot zpět na anonymní reprezentace pro dotazy zapsané do protokolů).



  1. Oracle DBA Mentor

  2. Mohu použít samostatnou databázovou vrstvu Laravel?

  3. Uvolněte velmi rozsáhlé databáze

  4. Jak implementovat LIMIT s SQL Server?