Jak to jest w bazie MySQL czy PG to dokladnie nie wiem trzeba by doczyta. Ale wyjasnie CI na przykladzie ORACLE.
Zapytanie gdzie sa parametry bindowane trafia do bazy nastepnie jest kilka etapow zanim przejdzie do exekucji tego zapytania. Sprawdzanie poprawosci, wyciaganie odpowiednich obiektow, sprawdzanie czy te obiekty istnieja, nastepnie sa wykonywane plany wykonan takiego zapytania (ile to trudno powiedziec) wybierany jest oczywiscie najlepszy plan wykonania. Nastepnie taki plan jest zapisywany w library cache (mam nadzieje ze nie pomylilem miejsca) i nastepuje bindowanie parametrow i wykonanie zapytania, zwrocenie kursora a nastepnie to juz sie mozna domyslec.
Teraz gdy wysylasz 2 raz takie samo zapytanie o tych samych parametrach gdzie zamiast wartosci masz binda nastepuje porownianie z library cache i jesli znak po znaku takie zapytanie wystepuje (w 10g wazne sa nawet puste znaki, komentarze itd) to pewien etap przetwazania zapytania jest pomijany i nastepuje etap exekucji zapytania.
Pytanie nasowa sie czy zawsze sie tak stosuje? Otoz nie. Sa przypadki w ktorych nie nalezy bindowac, poniewaz optymalizator dobiera plan wykonania dla okreslonych parametow gdzie wazny jest index, rozklad rekordow itd. I jesli jest plan obliczony 1 zapytania dla jednego konkretnego rekordu a my w parametrze bindowanym podamy zupelnie inny, ktory bedzie zwrocony w bardzo wielkim czasie. Takie sytuacje sa zadkoscia w bazach danych ale sie zdarzaja. Tak czy inaczej warto miec je w pamieci.
Odnosnie bazy MySQL czy PG az tak sie w to nie wgryzalem, na pewno jakis tak cache jest (domyslam sie ze po zresetowaniu bazy pewnie jest czyszczony). PDO z prepare i bindem powstalo wsumie na potrzebe ORACLE, na stronie ORACLE mozna troche szczegolow znalezc, choc bledy tez sie pojawiaja.
Jesli znajdziesz ciekawy art na temat bind i prepare w MySQLu to bardzo prosze o linka, warto poczytac jak to sie odbywa w tej bazie.
Mam nadzieje ze pewne rzeczy wyjasnilem jak bys mial pytania to pisz.
@
wijet Hehe troszeczke mnie ubiegles. Czyli podobnie jak ORACLE.
Na swoim blogu zamiscilem post z wiekszymi szczegolami jak to przebiega:
http://blog.chylek.pl/pdo-prepared-stateme...sc-zapytan-sql/