Czy podczas pracy z tabelami w Oracle wiesz, kiedy ustawiasz dobry indeks względem złego indeksu?Skąd wiesz, co to jest dobry indeks?
Odpowiedz
To zależy od tego, co masz na myśli przez "dobry" i "zły". Zasadniczo musisz zdać sobie sprawę, że każdy dodany przez ciebie indeks zwiększy wydajność przy każdym wyszukiwaniu w tej kolumnie (więc dodanie indeksu do kolumny "nazwisko" tabeli osoby zwiększy wydajność zapytań, które zawierają "where lastname" w nich), ale zmniejszyć wydajność zapisu w całej tabeli.
Powodem tego jest, że dodajesz lub aktualizujesz wiersz, musisz dodać lub zaktualizować zarówno samą tabelę, jak i każdy indeks, którego jest członkiem. Jeśli więc masz pięć indeksów na stole, każde dodanie musi pisać w sześciu miejscach - pięciu indeksach i tabeli - a aktualizacja może dotykać do sześciu miejsc w najgorszym przypadku.
Tworzenie indeksu to czynność wyważająca między szybkością zapytania a szybkością zapisu. W niektórych przypadkach, takich jak datamart, który jest ładowany tylko raz na tydzień w nocnej pracy, ale przepytany tysiące razy dziennie, rozsądnie jest przeciążać się indeksami i przyspieszać zapytania tak bardzo, jak to tylko możliwe. Jednak w przypadku systemów przetwarzania transakcyjnego online należy spróbować znaleźć równowagę między nimi.
Krótko mówiąc, dodaj indeksy do kolumn, które są często używane w kwerendach wybranych, ale staraj się unikać dodawania zbyt wielu i dodaj najpierw najczęściej używane kolumny.
Po tym jest testowanie obciążenia, aby zobaczyć, jak wydajność reaguje w warunkach produkcyjnych, i wiele poprawek, aby znaleźć wyważony równowagi.
Oto wielki artykuł SQL Server: http://www.sql-server-performance.com/tips/optimizing_indexes_general_p1.aspx
Chociaż mechanika nie będzie działać na Oracle, wskazówki są bardzo apropos (minus na rzecz indeksów klastrowych, które nie dość działa w ten sam sposób w Wyrocznia).
Dobry indeks to coś, na czym można polegać, aby być unikalnym dla określonego wiersza tabeli.
Jednym z powszechnie używanych schematów indeksowych jest użycie liczb, które zwiększają się o 1 dla każdego wiersza w tabeli. Każdy wiersz będzie miał inny indeks liczb.
Pola, które są różnorodne, bardzo specyficzne lub niepowtarzalne, tworzą dobre indeksy. Takich jak daty i znaczniki czasu, unikalne numery zwiększające (powszechnie używane jako klucze podstawowe), nazwiska osób, numery tablic rejestracyjnych itp.
Przykład kontrprzykładu byłby płeć - istnieją tylko dwie wspólne wartości, więc indeks nie ma znaczenia. t naprawdę pomaga zmniejszyć liczbę wierszy, które muszą zostać przeskanowane.
Pełnookresowe opisowe ciągi o dowolnej formie generują słabe indeksy, ponieważ każdy, kto wykonuje zapytanie, rzadko zna dokładną wartość ciągu.
Dane uporządkowane liniowo (takie jak znaczniki czasu lub daty) są powszechnie używane jako indeks klastrowy, który wymusza przechowywanie wierszy w kolejności indeksowej i umożliwia dostęp w kolejności, co znacznie przyspiesza zapytania o zakres (np. wszystkie zamówienia sprzedaży od października do grudnia "). W takim przypadku silnik DB może po prostu przeszukać pierwszy rekord określony przez zakres i zacząć odczytywać sekwencyjnie, aż dotrze do ostatniego.
@ Niesławna krowa - musisz myśleć o podstawowych kluczach, a nie indeksach.
@Xenph Yan - Coś inni nie poruszył wybiera co rodzaj indeksu utworzyć. Niektóre bazy danych nie dają dużego wyboru, ale niektóre mają wiele różnych indeksów. Drzewa B to domyślnie , ale nie zawsze są najlepszym rodzajem indeksu. Wybór właściwej struktury zależy od rodzaju użytkowania, jakiego oczekujesz. Jakie pytania są najbardziej potrzebne do wsparcia? Czy jesteś w środowisku czytającym głównie lub piszesz? Czy twoje zapisy są zdominowane przez aktualizacje lub dodatki? Itp itd.
Opis różnych typów indeksów oraz ich plusy i minusy dostępny jest tutaj: http://20bits.com/2008/05/13/interview-questions-database-indexes/.
Prosimy o skompilowanie informacji na ten temat i dodanie go do mojego połączonego wpisu dotyczącego indeksowania bazy danych. –
Kilka zasad, jeśli próbujesz poprawić konkretne zapytanie.
W przypadku konkretnej tabeli (w przypadku której należy rozpocząć Oracle) spróbuj indeksować każdą z kolumn użytych w klauzuli WHERE. Najpierw wstaw kolumny z równością, a następnie kolumny z zakresem lub podobne.
Na przykład:
WHERE CompanyCode = ? AND Amount BETWEEN 100 AND 200
Jeśli kolumny są bardzo dużych rozmiarów (np jesteś przechowywania niektóre XML lub coś) może być lepiej pozostawiając je z indeksu. Spowoduje to, że indeks będzie mniejszy do skanowania, zakładając, że musisz mimo to przejść do wiersza tabeli, aby spełnić listę wyboru.
Alternatywnie, jeśli wszystkie wartości w klauzulach SELECT i WHERE znajdują się w indeksie Oracle nie będzie musiał uzyskiwać dostępu do wiersza tabeli. Czasem dobrze jest umieścić wybrane wartości na końcu w indeksie i unikać dostępu do wszystkich razem.
Możesz napisać książkę o najlepszych sposobach indeksowania - poszukaj autora Jonathana Lewisa.
- 1. Co to jest automatyczny indeks pokrywający?
- 2. Skąd wiesz, kto naprawia kompilację?
- 3. Co to jest dobry JSP IDE
- 4. Co to jest dobry współczynnik testowania kodu?
- 5. Co to jest indeks wielu kluczy?
- 6. Co to jest indeks w SQLite?
- 7. Git: skąd wiesz, kto pchnął tag?
- 8. Co to jest C# 5 i skąd się bierze?
- 9. Co to jest dobry wielordzeniowy 64-bitowy program "Hello World"?
- 10. Co to jest dobry framework SPA do użytku z maszynopis?
- 11. Co to jest dobry przykład solrconfig.xml dla django-haystack?
- 12. Co to jest dobry mechanizm reguł biznesowych (BRE) dla .Net?
- 13. Co to jest dobry zestaw narzędzi do tworzenia aplikacji Blackberry?
- 14. Co to jest dobry kompilator kompilatora kompilatora C#/analizatora składni?
- 15. Co to jest dobry skrypt sprawdzania pisowni JavaScript lub Rails
- 16. Co to jest dobry zbiór danych do reprezentowania wyścigów konnych?
- 17. Co to jest dobry algorytm wyszukiwania dwuwymiarowego oparty na siatce?
- 18. Co to jest dobry klejnot koszyka zakupów dla Rails?
- 19. Co to jest klabject?
- 20. Co to jest DWASMod.dll?
- 21. Co to jest indeks pełnotekstowy i kiedy powinienem go używać?
- 22. Co to jest "==" w C?
- 23. Co to jest hyperkube?
- 24. Co to jest @ @ w Perlu?
- 25. Co to jest renderowanie progresywne?
- 26. Indeks dolny Swift AnyObject, skąd się wziął?
- 27. Co to jest Serializable? Co to znaczy?
- 28. Co to jest "usuń to"?
- 29. Co to jest dobry sposób na zakończenie skryptu node.js po "wszystko zostało zrobione"
- 30. Co to jest Pagel?
Zobacz również https://stackoverflow.com/questions/107132/what-columns-generally-make-good-indexes/. – fdelia