Re: GIN индекс: сортировка

From: "Dmitry E(dot) Oboukhov" <unera(at)debian(dot)org>
To: pgsql-ru-general(at)postgresql(dot)org
Subject: Re: GIN индекс: сортировка
Date: 2014-09-29 19:45:41
Message-ID: 20140929194541.GF30939@vdsl.uvw.ru
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-ru-general

А еще по GIST может кто подскажет

такая база:

id, text

база оч большая (база из прошлого примера, просто все строки
сконкатенированы)

строим GIST на триграммах

CREATE INDEX "test_trgm_idx" ON "table"
USING GIST (
"text"
"public"."gist_trgm_ops"
);

Далее кладем в базу мнооого записей.

Далее запрос

SELECT
*
FROM
table
ORDER BY
"text" <-> 'test'
LIMIT
100

Работает, но меееееедленно:

EXPLAIN ANALYZE показывает такое:

Limit (cost=0.67..209.06 rows=50 width=159) (actual time=36.071..2356.039 rows=50 loops=1)
-> Index Scan using test_trgm_idx on table (cost=0.67..23567041.91 rows=5654375 width=159) (actual time=36.070..2356.012 rows=50 loops=1)
Order By: text <-> 'test'

Total runtime: 2356.102 ms
(4 строки)

Я чет не понимаю. по идее он должен был бы открыть итератор и идти от
наиболее похожих к наименее и взять первые 100.
а он весь индекс перебирает (то есть проку от индекса - 0, без индекса
работает столько же времени - 2 секунды)

Вопрос: что сделать чтобы уменьшить время работы?

--

. ''`. Dmitry E. Oboukhov
: :’ : email: unera(at)debian(dot)org jabber://UNera(at)uvw(dot)ru
`. `~’ GPGKey: 1024D / F8E26537 2006-11-21
`- 1B23 D4F8 8EC0 D902 0555 E438 AB8C 00CF F8E2 6537

In response to

Responses

Browse pgsql-ru-general by date

  From Date Subject
Next Message Oleg Bartunov 2014-09-29 20:00:30 Re: [pgsql-ru-general] GIN индекс: сортировка
Previous Message Oleg Bartunov 2014-09-29 17:21:55 Re: [pgsql-ru-general] GIN индекс: сортировка