Autor wpisu: SongoQ, dodany: 02.02.2009 21:23, tagi: php, sql
Na forum php.pl pojawił się post z pytaniem czy zastosowanie prepared statements wpływa na wydajność zapytań.
Troszeczkę teorii:
Jak to wygląda od strony ORACLE:
Zanim dane zostaną zwrócone z bazy danych, po odebraniu odpowiedniego kodu baza danych Oracle musi wykonać określone czynności:
- tworzenie kursora
- proces parsowania zapytania jeśli nie istnieje w obszarze wspólnym. Na proces ten również wchodzi kilka etapów:
- analiza zapytania - sprawdzenie czy zapytanie składniowo jest poprawne
- sprawdzenie odwołań do obiektów
- sprawdzenie uprawnień
- modyfikacja zapytania, w celu uzyskania zapytania równoważnemu danemu, ale wykonywanemu efektywniej
- przygotowanie planów wykonania na podstawie statystyk, wskazówek
- wybranie najlepszego planu wykonania (najmniejszy koszt wykonania)
- zapisanie do obszaru wspólnego
Wykorzystanie wcześniejszego zapytania jest możliwe tylko wtedy, kiedy:
- tekst zapytania jest taki sam (wchodzą w to również komentarze i białe znaki),
- polecenie musi odwoływać sie do tych samych obiektów w bazie danych,
- zmienne wiązane muszą się tak samo nazywać i być tego samego typu.
- przygotowanie zapytania
- podwiązanie zmiennych
- wykonanie zapytania
- zwrócenie rekordów do użytkownika
Jeśli do bazy danych jest wysyłane takie samo zapytanie proces parowania nie jest wykonywany, przez co wydajność wzrasta bo pewna czść operacji jest pomijana.
Czy zawsze stosować takie rozwiązanie?
Są przypadki zapytań dla których najlepszy plan pierwszego wykonania dla pewnych parametrów jest nieoptymalny i zaleca się nie stosowanie zmiennych wiązanych.
MySQL:
Jeśli chodzi o bazę danych MySQL mechanizmy nie są aż tak bardzo zaawansowane ale pewne rzeczy są zaimplementowane.