SQL - tuning bazy danych
Aby zostać ekspertem ds. Baz danych lub ekspertem ds. Administratorów baz danych, potrzeba czasu. To wszystko wiąże się z dużym doświadczeniem w tworzeniu różnych projektów baz danych i dobrymi szkoleniami.
Ale poniższa lista może być pomocna dla początkujących, aby uzyskać dobrą wydajność bazy danych -
Użyj projektu bazy danych 3BNF wyjaśnionego w tym samouczku w rozdziale Pojęcia dotyczące RDBMS.
Unikaj konwersji liczby na znak, ponieważ liczby i znaki różnią się między sobą i prowadzą do obniżenia wydajności.
Korzystając z instrukcji SELECT, pobieraj tylko wymagane informacje i unikaj używania * w zapytaniach SELECT, ponieważ niepotrzebnie ładowałoby to system.
Starannie twórz indeksy dla wszystkich tabel, w których często przeprowadzasz operacje wyszukiwania. Unikaj indeksowania tabel, w których masz mniejszą liczbę operacji wyszukiwania i większą liczbę operacji wstawiania i aktualizowania.
Pełne skanowanie tabeli ma miejsce, gdy kolumny w klauzuli WHERE nie mają skojarzonego z nimi indeksu. Można uniknąć skanowania całej tabeli, tworząc indeks dla kolumn, które są używane jako warunki w klauzuli WHERE instrukcji SQL.
Należy bardzo uważać na operatory równości z liczbami rzeczywistymi i wartościami daty / czasu. Oba mogą mieć niewielkie różnice, które nie są oczywiste dla oka, ale które uniemożliwiają dokładne dopasowanie, zapobiegając w ten sposób zwracaniu wierszy przez zapytania.
Używaj rozsądnie dopasowywania wzorców. LIKE COL% jest prawidłowym warunkiem WHERE, redukującym zwracany zestaw tylko do tych rekordów, których dane zaczynają się od łańcucha COL. Jednak COL% Y nie zmniejsza dalej zwracanego zestawu wyników, ponieważ% Y nie może być skutecznie oszacowany. Wysiłek związany z przeprowadzeniem oceny jest zbyt duży, aby można go było wziąć pod uwagę. W tym przypadku używany jest COL%, ale% Y jest odrzucany. Z tego samego powodu wiodący symbol wieloznaczny% COL skutecznie zapobiega użyciu całego filtra.
Dostosuj swoje zapytania SQL, badając strukturę zapytań (i podzapytań), składnię SQL, aby odkryć, czy zaprojektowałeś swoje tabele do obsługi szybkiej manipulacji danymi i napisałeś zapytanie w optymalny sposób, umożliwiając DBMS efektywne manipulowanie danymi .
W przypadku zapytań, które są wykonywane regularnie, spróbuj użyć procedur. Procedura to potencjalnie duża grupa instrukcji SQL. Procedury są kompilowane przez silnik bazy danych, a następnie wykonywane. W przeciwieństwie do instrukcji SQL silnik bazy danych nie musi optymalizować procedury przed jej wykonaniem.
Jeśli to możliwe, unikaj używania operatora logicznego OR w zapytaniu. LUB nieuchronnie spowalnia prawie każde zapytanie skierowane do tabeli o znacznej wielkości.
Możesz zoptymalizować ładowanie zbiorcze danych, upuszczając indeksy. Wyobraź sobie tabelę historii zawierającą wiele tysięcy wierszy. Ta tabela historii może również zawierać jeden lub więcej indeksów. Kiedy myślisz o indeksie, zwykle myślisz o szybszym dostępie do tabeli, ale w przypadku ładowania wsadowego możesz skorzystać z porzucenia indeksów.
Podczas wykonywania transakcji wsadowych, wykonaj polecenie COMMIT po utworzeniu odpowiedniej liczby rekordów, zamiast tworzyć je po każdym utworzeniu rekordu.
Zaplanuj regularną defragmentację bazy danych, nawet jeśli oznacza to opracowanie cotygodniowej procedury.
Wbudowane narzędzia do strojenia
Oracle ma wiele narzędzi do zarządzania wydajnością instrukcji SQL, ale spośród nich dwa są bardzo popularne. Te dwa narzędzia to -
Explain plan - narzędzie identyfikuje ścieżkę dostępu, która zostanie wybrana po wykonaniu instrukcji SQL.
tkprof - mierzy wydajność na podstawie czasu, jaki upłynął podczas każdej fazy przetwarzania instrukcji SQL.
Jeśli chcesz po prostu zmierzyć czas, który upłynął od zapytania w Oracle, możesz użyć polecenia SQL * Plus SET TIMING ON.
Sprawdź dokumentację RDBMS, aby uzyskać więcej informacji na temat wyżej wymienionych narzędzi i defragmentacji bazy danych.