Mysql
 sql >> база данни >  >> RDS >> Mysql

Подготвените изявления кешират ли се от страна на сървъра при множество зареждания на страници с PHP?

Когато се обслужи заявка, php "почиства" екземпляра и освобождава ресурси и други променливи. Това се прави на няколко стъпки. Тъй като fastcgi поддържа процеса жив след заявка, не всички стъпки се изпълняват и не цялата памет се освобождава. Има напр. EG(persistent_list), който се използва от mysql_pconnect() , pg_pconnect() , ... Този списък не се изпразва между заявките, докато процесът е жив (може да бъде, в зависимост от действителната реализация, но това би противоречило на целта на EG(persistent_list)). Ако използвате постоянни връзки, вашият скрипт може да получи "повторно използвана" връзка, установена по време на предишна заявка.
За да (повторно) използвате директно подготвен израз, ви е необходим идентификаторът за този израз (и тази връзка). Когато използвате (php-)postgresql, това е просто уникален низ (по отношение на връзката), който предавате на pg_execute() , така че вашият скрипт няма проблем да получи достъп до изявлението, предварително подготвено от друг екземпляр (използвайки същата връзка).
Използвайки mysqli или PDO-mysql имате нужда от ресурс/обект като идентификатор на израза. Това е някакъв проблем, тъй като нито mysqli, нито разширението pdo изглежда предлагат начин за съхраняване на ресурса в EG(persist_list) между заявките и вие също не можете да го създадете отново. Освен ако php-fpm не предлага такава "услуга", изглежда невъзможно да се използва повторно подготвено изявление за mysql директно.
Всичко, на което можете да се надявате, е кеш на заявки от страна на сървъра . В последните версии (вижте връзката) той може да разпознае изявлението, когато използва подготвени оператори. Но дори и тогава той не използва повторно действително подготвеното изявление:

Така че, ако не се лъжа, в момента не можете да използвате повторно изявление на mysql, изготвено по време на предишна заявка в php.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mysql 1 произволен ред

  2. Достъп до mysql, работещ на localhost от minikube

  3. Преобразувайте секундите в продължителност на времето, което може да се чете

  4. ИЗБЕРЕТЕ СЛУЧАЙ КОГАТО ТОГАВА (ИЗБЕРЕТЕ)

  5. Как да изберете първия ред за всяка група в MySQL?