Strojenie SQL w bazie Oracle Autor: Marcin Malinowski
Agenda Rodzaje oracle’owych optymalizatorów Optymalizator regułowy Optymalizator kosztowy Wybór optymalizatora Kilka częstych błędów Plan zapytania Wskazówki optymalizatora zapytań Pytania
Rodzaje optymalizatorów Optymalizator regułowy (rule –based optimizer) Optymalizator (cost-based optimizer)
Optymalizator regułowy Oparty na zestawie 20 reguł (tzw. „Złote reguły”) Brak czynników zewnętrznych (rozmiar tabeli, selektywność indeksów) Przykładowe reguły: 1. Rowid = constant 5.Kolumna z indeksem unikatowym = constant 20. Full scan tabeli
Optymalizator kosztowy Bardziej wyrafinowany i elastyczny Działanie: Analiza składniowa Wszystkie plany zapytań Szacowanie kosztu Wybór najlepszego planu
Optymalizator kosztowy cd. Statystyki oraz metody ich zbierania: Analyze table Dbms_stats
Wybór optymalizatora Zdecydowanie kosztowy Dlaczego: Krótszy czas kodowania Programista nie musi znać reguł Większa uniwersalność, więcej produktów Regułowy nie rozwijany Wiele funkcji nie działa dla regułowego
Kilka częstych błędów Błędnie zapisane zapytania (bez indeksu) Brak indeksów Niepotrzebne sortowania Widoki oparte na widokach Zbyt wiele złączeń Błędne ustawienie konfiguracyjne
Plan zapytania Polecenie explain plan Przykłady Nested loops Hash_joins
Wskazówki optymalizatora Wykorzystanie wskazówek (ang. Hints) Przykłady wskazówek index(index_name, table_name) First_rows Full Use_hash
Pytania Dziękuję