Jak indeksy wpływają na wydajność zapytań?

12

Oczywiście utrzymanie kilku różnych wskaźników ma negatywny wpływ na wydajność wstawiania i usuwania. Co z wydajnością zapytań: czy w ogóle ma sens utrzymywanie zbyt wielu indeksów na stole? Czy wydajność zapytania poprawi się w każdym przypadku z dodanym indeksem (oczywiście w przypadku zapytań w ogóle korzystających z tego indeksu), czy też jest nawet możliwe, że wydajność zapytania obniży się przy zbyt dużej liczbie indeksów, ponieważ konieczne jest sprawdzenie wszystkich indeksów, aby uzyskać wynik?

W przypadku, gdy na stole są różne wskaźniki: czy wszystkie zostaną wzięte pod uwagę, czy tylko najlepsze z punktu widzenia optymalizatora? Czy Oracle implementuje wskaźniki wielowymiarowe?

pawelokowy
źródło
2
dlaczego tego nie przetestujesz i nie podasz wyników? :)
Neil McGuigan
Zrobię jutro :)
paweloque
2
Indeksy niekoniecznie spowalniają usuwanie, mogą je również przyspieszyć (podobnie jak aktualizacje mogą korzystać z indeksu)
a_horse_w_na_nazwie
@el szefie, jaki sens ma wynalezienie koła? więc tak, kwestionowany jest efekt wydajności zapytania, choć wiemy na pewno, że wpłynie to na wstawianie / usuwanie. Co powiesz na aktualizacje? czy będzie to miało negatywny wpływ?
Sangram,

Odpowiedzi:

15

Wygenerowanie planu potrwa nieznacznie dłużej, gdy będzie więcej do rozważenia indeksów, ale wątpię, by różnica była wymierna. Te powody spadku indeksu nie wymienia wydajność kwerendy. Z drugiej strony, ogólnie rzecz biorąc, nie powinieneś tworzyć indeksów, chyba że wiesz, że zostaną one wykorzystane do zwiększenia wydajności zapytania.

W Przewodniku pojęciach Oracle podano kryteria tworzenia indeksu.

Zasadniczo rozważ utworzenie indeksu w kolumnie w dowolnej z następujących sytuacji:

  • Indeksowane kolumny są często sprawdzane i zwracają niewielki procent całkowitej liczby wierszy w tabeli.

  • W indeksowanej kolumnie lub kolumnach istnieje referencyjne ograniczenie integralności. Indeks jest sposobem na uniknięcie pełnej blokady tabeli, która w innym przypadku byłaby wymagana, jeśli zaktualizujesz klucz podstawowy tabeli nadrzędnej, scalisz się z tabelą nadrzędną lub usuniesz z tabeli nadrzędnej.

  • Unikalne ograniczenie klucza zostanie nałożone na tabelę i chcesz ręcznie określić indeks i wszystkie opcje indeksu.

Wszystkie indeksy będą brane pod uwagę w tym sensie, że wszystkie indeksy w tabelach w zapytaniu są sprawdzane w celu ustalenia, czy można ich użyć. Te, które mogą być dalej badane w celu ustalenia przydatności.

Leigh Riffel
źródło
7

Dopóki twoje statystyki są aktualne, optymalizator oparty na kosztach powinien podejmować rozsądne decyzje, które indeksy zastosować. Jeśli nie, to czas na skorzystanie ze wskazówek . Nigdy nie przejrzy indeksu w kolumnie, który nie jest konieczny do spełnienia zapytania.

Gajusz
źródło
0

Znalazłem to w wyborze strategii Index of the application guide programisty . Ta strona dotyczy „wyboru strategii indeksu”:

Ogranicz liczbę indeksów dla każdej tabeli

Im więcej indeksów, tym więcej kosztów powstaje przy zmianie tabeli. Po wstawieniu lub usunięciu wierszy wszystkie indeksy w tabeli muszą zostać zaktualizowane. Gdy kolumna jest aktualizowana, wszystkie indeksy w kolumnie muszą zostać zaktualizowane.

Należy porównać korzyść związaną z wydajnością indeksów dla zapytań w stosunku do wydajności związanej z aktualizacjami. Na przykład, jeśli tabela jest głównie tylko do odczytu, możesz użyć większej liczby indeksów; ale jeśli tabela jest mocno zaktualizowana, możesz użyć mniejszej liczby indeksów.

Sangram
źródło
2
Z pytania: „Oczywiście utrzymanie kilku różnych wskaźników ma negatywny wpływ na wydajność wstawiania i usuwania. Co powiesz na wydajność zapytań”
mówi Jack, spróbuj wypróbować topanswers.xyz 26.09.11