2012-09-27 8 views
6

Przeczytałem, że gdy wiele indeksów w bazie danych może poważnie zaszkodzić wydajności, ale w dokumencie PostgreSQL nie mogę znaleźć nic na ten temat.Czy szybkość PostgreSQL SELECT ma niekorzystny wpływ na zbyt wiele indeksów w tabeli?

Mam bardzo duży stół z czymś takim jak 100 kolumn i miliard wierszy i często muszę wykonywać wiele wyszukiwań w wielu różnych dziedzinach.

Czy wydajność tabeli PostgreSQL spadnie, jeśli dodaję wiele indeksów (może 10 unikatowych indeksów kolumn i 5 lub 7 3 indeksów kolumn)?

EDYCJA: Z powodu spadku wydajności rozumiem wydajność w pobieraniu wierszy (wybierz), baza danych będzie aktualizowana raz w miesiącu, więc aktualizacja i czas wstawiania nie stanowią problemu.

+0

Teoretycznie wydajność zapisu działania do wszystkich tabel RDBMS spadną, ponieważ przy każdym zapisie indeksy muszą być zachowane. W tym przypadku nie uwzględniłbym braku noty w dokumentacji, co oznacza, że ​​nie ma kompromisu w zakresie wydajności, zawsze jest. Jak zwykle, profiluj swoją aplikację/bazę danych, aby zobaczyć dokładny koszt tego kompromisu. –

+5

[Wszystko, co możesz chcieć wiedzieć o indeksach SQL] (http://use-the-index-luke.com/) –

+0

Baza danych będzie aktualizowana raz w miesiącu lub coś podobnego, więc wydajność wstawiania lub aktualizacji jest niezbyt ważne – Topo

Odpowiedz

6

Indeksy są utrzymywane, gdy zawartość tabeli została zmodyfikowana (tj INSERT, UPDATE, DELETE)

Planer zapytań PostgreSQL może zdecydować, kiedy użyć indeksu, a gdy nie jest to konieczne i kolejny skan jest bardziej optymalny.

A więc posiadanie zbyt wielu indeksów zaszkodzi modyfikowalnej wydajności, a nie pobieraniu.

+0

Tak więc jedynym przedmiotem handlu posiadającym wiele indeksów jest przestrzeń i czas aktualizacji/wstawiania? – Topo

+0

@ Topo Zasadniczo tak. Nie spodziewałbym się, że planista wpadnie w zakłopotanie zbyt dużą liczbą indeksów :) – dezso

+0

Tak, niepotrzebne indeksy nie będą używane przez terminarz zapytań. –

1

Indeksy będą musiały być aktualizowane przy każdym insert i update z udziałem tych kolumn.

0

Mam kilka wykresów o tym na mojej stronie: http://use-the-index-luke.com/sql/dml

Indeks jest czystą redundancję. Zawiera tylko dane, które są również przechowywane w tabeli . Podczas operacji zapisu baza danych musi utrzymywać te nadmiarowe zwolnienia. W szczególności oznacza to, że wstawianie, usuwanie i aktualizacja wpływa nie tylko na tabelę, ale także na indeksy przechowujące kopię danych, których dotyczy problem.

Tytuły rozdziałów sugerują, że wpływ indeksy mogą mieć:

Insert - nie może podjąć bezpośrednie korzyści z indeksami

Usuń - korzysta indeksy dla klauzuli WHERE

Update - robi nie wpływa na wszystkie indeksy tabeli

+1

Byłoby o wiele bardziej przydatne, gdybyś opublikował kluczową część zawartości tutaj, z linkiem do twojej (odrzuconej) strony, by uzyskać więcej informacji. – PearsonArtPhoto

Powiązane problemy