2009-07-30 9 views
8

Co robi wyrażenie INDEX? Przykładem na koniec:INDEKS w Postgresie?

CREATE TABLE tags (
    tag_id      varchar(255) NOT NULL, 
    "{Users}{userID}question_id" int4 NOT NULL, 
    tag       varchar(20), 
    CONSTRAINT tag 
    PRIMARY KEY (tag_id)); 
CREATE INDEX tags_tag 
    ON tags (tag); 
+5

Co jest złego w ludziach, którzy zadają takie pytania? Jest to doskonale uzasadnione pytanie, a w rzeczywistości jest wielu ludzi, którzy * myślą *, że wiedzą wszystko o bazach danych i nie potrafią wyjaśnić, jak działa indeks. –

Odpowiedz

10

index jest struktura bazy danych, które mogą przyspieszyć dostęp do poszczególnych wierszy w bazie danych, podczas wyszukiwania opartego na polu (-ach) w indeksie.

W swoim przykładzie instrukcja CREATE INDEX tworzy indeks o nazwie tags_tag w tabeli tags przy użyciu kolumny tag. Jeśli chcesz wyszukać wiersze z tabeli na podstawie pola tag, baza danych może użyć indeksu, aby bardziej efektywnie wyszukać wiersz. Bez indeksu baza danych może wymagać pełnego skanowania tabeli, co może potrwać znacznie dłużej (w zależności od wielu czynników, takich jak rozmiar tabeli, rozkład wartości, dokładne kryteria zapytania). Różne bazy danych obsługują również różne typy indeksów, które można wykorzystać do wyszukiwania danych na różne sposoby.

Istnieje także wada indeksów: dla każdego indeksu prędkości zapisu spadają dla tej tabeli. Jeśli wstawisz wiersz, posiadanie indeksu oznacza, że ​​oprócz zapisu w bazie danych do samego wiersza, będzie on również musiał zaktualizować indeks.

Wybór kolumn do umieszczenia w indeksie może być trudny i jak zwykle testy porównawcze lub zapytania rzeczywistych danych rzeczywistych są najdokładniejszym sposobem pomiaru wydajności. Generalnie powinieneś chcieć indeksów w kolumnach, które będziesz szukał. Więc jeśli prawdopodobnie chcesz wyszukać wiersz przez tag, to z pewnością warto umieścić tam indeks. Ale jeśli masz książkę adresową, nie musisz (prawdopodobnie) wyszukiwać na ulicy, kodzie pocztowym/kodzie pocztowym ani numerze telefonu, więc nie będzie warta wydajności zapisu.

Kolumny z kluczem podstawowym prawie zawsze zawierają indeks generowany automatycznie przez bazę danych. A jeśli chcesz, aby wartości konkretnej kolumny były niepowtarzalne, można utworzyć UNIQUE INDEX, aby to wymusić.

This Pytanie SO pyta o reguły dla indeksów baz danych, które mogą być przydatne.

+0

Czy istnieje jakiś rodzaj kostki, gdy powinieneś mieć indeks? Zamiast tego intuicyjnie wybrałem indeks w tym przykładzie, ponieważ znaczniki w stylu SO prawdopodobnie mają prędkość dostępu jako wąskie gardło. –

+0

Czy to jest indeks? Zapamiętywam md5deep (id_kredu, id_użytkownika, czas) - zmienia się jako klucz podstawowy do tabeli, zamiast sprawdzać każdą wartość osobno? –

+0

Przyspiesza czas dostępu do kompromisu: zwiększony czas zapisu. –

Powiązane problemy