2013-02-23 9 views
6

Czy możliwe jest posiadanie indeksu dla pewnego pola typu złożonego? Przyjmijmy na przykład, tworzyć rodzajPostgreSQL: Utwórz indeks dla pól w typie złożonym?

CREATE TYPE complex AS (
    r  double precision, 
    i  double precision 
); 

i chcieliby mieć (zwłaszcza kratki/GIST/GIN) wskaźniku r i jeden nad i, byłoby to możliwe?

Czy możliwe jest posiadanie indeksu nad pierwszym, drugim, trzecim, ... elementem pola tablicy?

Załóżmy, używam complex[], byłoby możliwe, aby Indeks wszystkich complex[0], nad całą complex[1] itp

+1

Zaawansowane użycie indeksu, może być kandydatem do migracji do [dba.SE] (http://dba.stackexchange.com/). –

Odpowiedz

17

Tak, absolutnie możliwe. Użyj numeru index on an expression. Najtrudniejszą częścią jest syntax for composite types.

indeks b drzewa na element typu złożonego:

CREATE TABLE tbl (tbl_id serial, co complex); 

CREATE INDEX tbl_co_r_idx ON tbl (((co).r)); -- note the parentheses! 

SQL Fiddle z EXPLAIN ANALYZE.
samo działa dla elementów tablicy, nawet dla tablicy typu kompozytowego:

CREATE TABLE tbl2 (tbl2_id serial, co complex[]); 

CREATE INDEX tbl2_co1_idx ON tbl2 ((co[1])); -- note the parentheses! 

Zauważmy, że wyrażenie indeks może być używany tylko w przypadku zapytań, jeśli wyrażenie pasuje bardziej lub mniej dosłownie.

Ale to nie ma sensu z indeksem GIN jak wspomniałeś. Per documentation:

GIN oznacza uogólniony indeks odwrócony. GIN jest przeznaczony do obsługi przypadków, w których indeksowane pozycje są wartościami złożonymi, a zapytania, które mają być obsługiwane przez indeks, muszą wyszukiwać wartości elementu, które pojawiają się w elementach złożonych.

Indeks GIN ma sensu na tablicy typu złożonego jako całość, aby szukać elementu wewnątrz. Ale potrzebujesz implementacji dla konkretnego typu. Oto list of examples in standard Postgres (oprócz podstawowej obsługi wszystkich tablic jednowymiarowych).

+0

Dzięki za bardzo szczegółową i dobrą odpowiedź! Dziękuję również za podpowiedź dotyczącą _GIN_, jesteś tu całkowicie! – navige

Powiązane problemy