Mysql
 sql >> Baza danych >  >> RDS >> Mysql

PHP PDO:jak ponowne przygotowanie instrukcji wpływa na wydajność?

MySQL (jak większość DBMS) buforuje plany wykonania dla przygotowanych instrukcji, więc jeśli użytkownik A utworzy plan dla:

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

(gdzie v1 i v2 są zmiennymi wiązania) następnie wysyła wartości do interpolacji przez DBMS, a następnie użytkownik B wysyła to samo zapytanie (ale z różnymi wartościami do interpolacji) DBMS nie musi ponownie generować planu. tzn. to DBMS znajduje pasujący plan, a nie PDO.

Oznacza to jednak, że każda operacja na bazie danych wymaga co najmniej 2 podróży w obie strony (pierwsza do przedstawienia zapytania, druga do przedstawienia zmiennych wiązania) w przeciwieństwie do pojedynczej podróży w obie strony dla zapytania z wartościami literalnymi, co powoduje dodatkowe koszty sieciowe . Istnieje również niewielki koszt związany z wyłuskiwaniem (i utrzymywaniem) pamięci podręcznej zapytań/planów.

Kluczowe pytanie brzmi, czy ten koszt jest większy niż koszt wygenerowania planu w pierwszej kolejności.

Chociaż (z mojego doświadczenia) zdecydowanie wydaje się, że korzystanie z przygotowanych oświadczeń z Oracle zdecydowanie przynosi korzyści, nie jestem przekonany, że to samo dotyczy MySQL - jednak wiele będzie zależeć od struktury Twojej bazy danych i złożoności jej zapytanie (a dokładniej, ile różnych opcji optymalizator może znaleźć w celu rozwiązania zapytania).

Spróbuj sam to zmierzyć (wskazówka:możesz ustawić próg powolnego zapytania na 0 i napisać kod, aby przekonwertować wartości dosłowne z powrotem na anonimowe reprezentacje dla zapytań zapisanych w dziennikach).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak uzyskać czas UTC pola daty i godziny?

  2. MySQL tylko w bieżącym miesiącu?

  3. Jaki jest najszybszy sposób na zrzucenie i załadowanie bazy danych MySQL InnoDB przy użyciu mysqldump?

  4. Usuń pojedyncze cudzysłowy z where_in w codeigniter

  5. Długość komentarza do tabeli w MySQL