2014-09-29 23:45 GMT+04:00 Dmitry E. Oboukhov <unera@debian.org>:
А еще по 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
а WHERE "text" % 'test' влом написать ?
Работает, но меееееедленно:
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 секунды)