2012-01-19 19 views
7

Jestem nowicjuszem w postgres. Mam kolumnę o nazwie host (ciąg varchar2) w tabeli, która ma około 20 milionów wierszy. Jak korzystać z indeksowania, aby zoptymalizować moje wyszukiwanie, aby znaleźć konkretnego hosta. Co więcej, ta kolumna będzie aktualizowana codziennie, czy muszę pisać indeksowanie spustu w określonym przedziale czasowym? Jeśli tak, w jaki sposób mogę to zrobić? (Dla Records Używam Ruby i Rails 3)Indeksowanie PostgreS?

Odpowiedz

7

Zakładając robisz dokładne wyniki, należy po prostu być w stanie utworzyć indeks i pozostawić go:

CREATE INDEX host_index ON table_name (host) 

optymalizator kwerendy należy używać tylko, że automatycznie.

Możesz chcieć określić inne opcje, takie jak sortowanie, które chcesz użyć.

Aby uzyskać więcej informacji, patrz PostgreSQL docs for CREATE INDEX.

+0

, więc nie muszę pisać wyzwalacza? Czy indeksowanie zostanie zaktualizowane w miarę aktualizowania moich rekordów? –

+2

Indeksowanie jest aktualizowane podczas aktualizacji rekordów. Ogólna zasada mówi, że każdy indeks przyspiesza pobieranie, ale spowalnia aktualizowanie informacji. Należy więc zachować ostrożność przy wyborze struktury indeksu, ponieważ może to znacząco wpłynąć na wydajność aktualizacji. – J0HN

0

Proponuję użyć od czasu wprowadzenia go z PostgreSQL 9.5 zamiast tradycyjnego indeksu btree.

0

Do wyszukiwania tekstu zaleca się stosowanie typów indeksów GIN lub GiST.

https://www.postgresql.org/docs/9.5/static/textsearch-indexes.html

Inną możliwością jest to, że jeśli były tylko wykonując dokładne dopasowanie w kolumnie host, czyli nie ma porównania nierówność (>, <) i częściowe dopasowanie (like, wieloznaczny) zaangażowany, można rozważyć przekształcenie host do wartości skrótu, aby znacząco przyspieszyć wyszukiwanie.