Wprowadzenie do dostrajania SQL
- Instrukcje SQL są napisane w celu pobrania /pobrania danych z bazy danych. Chcemy, aby nasza instrukcja sql działała szybko (dostrajanie sql) i podawała wyniki w sekundach.
- Źle zaprojektowany sql może spowolnić całą operację bazy danych i zatrzymać całą operację. Znacznie trudniej jest napisać wydajny SQL niż pisać funkcjonalnie poprawny SQL. Dostrajanie wydajności sql może znacznie poprawić kondycję i wydajność systemu.
- Kluczem do strojenia SQL jest zminimalizowanie danych, do których uzyskuje dostęp, aby zapewnić wynik. Możemy zminimalizować dane, do których uzyskuje dostęp, aby zapewnić wynik poprzez optymalną ścieżkę wyszukiwania.
Prostym przykładem byłoby
select * from dept where emp=10
- Teraz to zapytanie będzie musiało przeszukać cały dział tabeli, aby znaleźć dane, gdzie emp=10. Musi więc mieć dostęp do pełnego stołu
- Teraz, jeśli utworzymy kolumnę index to emp, będzie ona mogła po prostu uzyskać dostęp do indeksu i uzyskać wynik. Więc tutaj ma dostęp do mniejszej ilości danych
12 kroków do wykonania strojenia SQL w Oracle
Oto ogólne wskazówki dotyczące dostrajania wydajności sql
(1) Najpierw musisz mieć wszystkie wymagane narzędzia do strojenia sql. Musisz mieć dobre informacje na temat śledzenia, formatowania śladu, planu wyjaśniania, czytania planu wyjaśniania w Oracle.
Dobra wiedza na temat różnych metod łączenia dostępnych w Oracle i jak efektywnie z nich korzystać
(2) Czytaj mniej danych i bądź wydajny we/wy.
Im więcej danych odczytasz dla instrukcji sql, tym więcej zatrzasków musi uzyskać i spowalnia wydajność. więc musi zawsze wykonywać mniej odczytów logicznych
Wpisz sensowną instrukcję sql, gdzie odpowiednie filtry . Sprawdź liczbę wierszy w różnych zaangażowanych tabelach i znajdź najlepszą metodę tworzenia instrukcji sql
(2) Używaj dobrych indeksów Oracle
Indeksy B-Tree i indeksy Bitmap mogą być używane do zwiększenia wydajności zapytań, jeśli zwracane dane są mniejsze niż 10%. Ale musimy być ostrożni podczas tworzenia indeksu, ponieważ musi on być również utrzymywany dla operacji wstawiania, aktualizacji i usuwania. Tak więc tworzenie indeksu powoduje narzut na wiele rzeczy. Dlatego musimy dokładnie zbadać efekt utworzenia indeksu.
(3) Unikaj sql, który wyłącza użycie indeksu
SQL, który wyłącza indeksy
(a)Funkcje ( to_char(), to_date() itd. )
Poprawka:przenieś funkcję na stronę „zmienna stała/powiązanie”
(b) Typ Casting
W SQL
gdzie emp_no =10 (emp_no to varchar2)
W PL/SQL
gdzie emp_no =v_emp_num (v_emp_num to liczba)
Modyfikatory
i id + 0 =111
i data + 1 =sysdate (spróbuj date =sysdate – 1)
Poprawka:Zmień to, aby tego uniknąć
(4) Zawsze używaj zmiennej bind w aplikacji. Jeśli nie użyjesz zmiennej bind w oracle , sql będzie analizowany za każdym razem i wpłynie na wydajność bazy danych. Jeśli zawiera zmienną bind, sql zostanie zapisane w pamięci podręcznej i dalsze wykonywanie nie będzie wymagało analizowania, a tym samym poprawi się ogólna wydajność systemu
(5) UNIA a OR. Użyj UNION dla zapytań z dwiema wyraźnymi ścieżkami wykonania; każdy zwraca dość małą liczbę wierszy. Nie używaj Unii w przypadku zapytań, które prawdopodobnie zwrócą dużą liczbę wierszy, ponieważ wszystkie wiersze muszą zostać posortowane, a większość z nich zostanie odrzucona. OR ma tendencję do wyłączania indeksu
(6) Użyj dokładnych statystyk optymalizatora na stole, aby uzyskać optymalny plan.
(7) Jeśli używasz funkcji na wyrażeniu na warunku, sprawdź, czy w tej kolumnie istnieje indeks oparty na funkcji. Jeśli nie jest obecny, indeks nie zostanie użyty
(8) Użyj istnieje vs w i Nie istnieje vs nie w dla skorelowanych podzapytań
(9) Unikaj złych praktyk kodowania
Kilka wskazówek
(a) Unikaj łączenia kartezjańskiego . Upewnij się, że wszystkie tabele wymagane w zapytaniach są potrzebne i połączone ze sobą
(b) Użyj Decode, aby uniknąć wielokrotnych podróży do bazy danych
(c) Staraj się unikać łączenia zewnętrznego
(d ) Czasami rozkład logiki na małe części przyspiesza pracę
(10) Jeśli próbujesz użyć złożonego widoku, sprawdź, czy zamiast tego można użyć tabel bazowych, ponieważ widok ma tendencję do obniżania wydajności
(11) Użyj UNION ALL Vs UNION, jeśli wiesz, że pobierane dane nie będą zawierać zduplikowanych wierszy
(12) Użyj wskazówek, aby zoptymalizować plan wykonania. Czasami podpowiedź może być wykorzystana do zmiany planu wykonania zapytania tak, aby obrać najbardziej optymalną ścieżkę.
Czasami podgląd bindowania tworzy zły plan, więc w takim przypadku umieszczenie niezbędnej podpowiedzi, aby naprawić plan, pomoże w uzyskaniu dobra wydajność za każdym razem
Najczęstsze wskazówki to
/*+ LEADING (alias tabeli) */ określa tabelę, od której należy rozpocząć dołączanie
/*+ FIRST_ROWS */ bardzo dobre dla on-line screens – faworyzuje ZAGNIEŻDŻONE PĘTLE
/*+ INDEX ( nazwa alias.indexu tabeli) */ określa indeks, którego chcesz użyć. Uwaga:jeśli indeks zostanie usunięty i odtworzony, a nazwa zmieni się, wskazówka nie będzie już ważna.
/*+ USE_NL (alias tabeli 1 alias tabeli 2)*/ prosi optymalizator o użycie połączenia zagnieżdżonego dla dwóch określonych tabel
Unikaj niepotrzebnych wskazówek dotyczących optymalizacji i używaj ich ostrożnie
Oto kilka wskazówek, jak uniknąć problemów i wykonać dostrajanie sql. Strojenie sql to wielki ocean i można się czegoś nauczyć tylko ćwicząc. Powodzenia!!
Też czyta
https://docs.oracle.com/cd/B19306_01/server.102/b14211/sql_1016.htm