- Sprawdzenie składni (SYNTAX)
- Sprawdzenie obiektów (SEMANTIC)
- Sprawdzenie uprawnień (PRIVILEGE)
- Alokowanie zapytania w PSA (Private SQL Area)
- Odpytanie czy istnieje zapytanie w PSA (TAK - uruchomienie zapytania (soft parse), NIE - zapytanie jest alokowane, optymalizowane i dopiero po wszystkim uruchamiane (hard parse))
Etapy działania optymalizatora
- Query Transformer - zmienia zapytania na wydajniejsze bez zmiany logicznego sensu
- Estymator - wykorzystuje statystyki, próbuje wygenerować maksymalną ilość planów wykonania zapytania
- Plan generator - tworzy plany wykonania zapytania działając wspólnie z estymatorem
- RSC (Row source generator) - wybiera najlepszy plan i go wykonuje. Otrzymujemy w nim zestaw wierszy (tabele, widoki), tworzy drzewo źródeł z informacjami o porządku wykonania, metodach dostepu i połączeń, operatorach.
Selektywność = ilość wierszy / całkowita ilośc wierszy
Kardynalnośc (liczebność) = selektywność * całkowita liczba wierszy. Kardynalność służy do określania kosztów filtrów, sortowania i joinów
Powyższe parametry wpływają na estymację kosztów I/O i sortowania
Selektywność jest zapisywana w statystykach. Jeśli ich nie mamy to obliczana jest nastepująco:
- Dla jednej kolumny selektywność = 1/num_distinct
- Dla większej ilości kolumn jest to iloczyn wartości 1/num_distinct
Wartości num_distinct otrzymać możemy z poniższego zapytania
select
column_name,
num_distinct from dba_tab_columns
where table_name = 'DEPARTMENTS'
Koszt - określa szacunkowa liczba odczytów I/O wymaganą do realizacji zapytania
Koszt = (odczyt pojedynczego bloku + odczyt wielu bloków + koszt CPU) / średni czas odczytu pojedynczego bloku