Najważniejszą częścią procesu kompilacji jest utworzenie planu kwerend.
Plan zapytania, jak sugeruje nazwa, wskazuje, w jaki sposób baza danych powinna wykonać zapytanie (np. Które indeksy użyć, typy łączenia, które mogą być używane, takie jak sprzężenie w pętli/mieszanie/scalanie itp.). Może to trochę potrwać, ponieważ baza danych potrzebuje przeanalizować informacje na temat tabel, aby dobrze zgadnąć, co jest optymalne (np. Rozmiary tabel, dostępne indeksy, konkretne indeksy itp.).
Przygotowane oświadczenia mogą zaoszczędzić czas, trzeba uważać, ponieważ czasami mogą spowolnić program. Czemu? Ponieważ nie dostarczając wartości klauzuli where jako części kompilacji, baza danych musi odgadnąć wartości, które zamierzasz podać, i może wybrać wartości, które prowadzą do nieoptymalnego planu zapytania.
Może to być najbardziej widoczne w przypadku zapytań dotyczących zakresu. Załóżmy na przykład, że tworzymy przygotowaną instrukcję z minimalnymi i maksymalnymi datami jako parametrami. To zapytanie posłuży do pobrania kilku dni transakcji. Biorąc pod uwagę mały zakres dat, kwerenda ta może być najbardziej wydajna do wykonania, jeśli baza danych korzysta z indeksu nieklastrowego.
Ponieważ baza danych nie wie, jakie parametry należy podać, baza danych może zostać zoptymalizowana dla znacznie większego zakresu dat (np. Roku lub więcej), który może być najskuteczniejszy do wykonania przy użyciu skanowania tabeli. W takim przypadku użycie przygotowanej instrukcji spowolniłoby Twój program (chyba, że podasz wskazówkę do bazy danych, jakie parametry optymalizować lub jawnie wskaże, które indeksy użyć).
Oczywiście jeśli w przygotowanym zestawieniu podane parametry będą wskazywać na poszczególne rekordy (np. Unikalne klucze na tabelach), baza danych nie może się nie udać podczas tworzenia planu zapytań.
Chyba staram się podkreślić, że są tutaj plusy i minusy. Przygotowane dokumenty mogą być szybsze w niektórych sytuacjach, ale trzeba zachować ostrożność.
Dobry Szczegóły o Pre-kompilacji: [http://stackoverflow.com/questions/5497297/what-does-pre-compiling-a-jdbc-preparedstatement-do][1] [1]: http: // stackoverflow.com/questions/5497297/what-does-pre-compiling-a-jdbc-preparestatement-do – Awan