2012/10/22 Tom Lane <t...@sss.pgh.pa.us>: > Pavel Stehule <pavel.steh...@gmail.com> writes: >> but using DISTINCT breaks KNN searching optimization > >> postgres=# explain select distinct nazobce, nazobce <-> 'Benešov' from >> obce order by nazobce <-> 'Benešov' limit 10 > > Don't hold your breath. There are two ways the system could implement > the DISTINCT clause: either sort and uniq, or hashaggregate. > hashaggregate will destroy any input ordering, so there's no value in > using the index as input. sort and uniq requires the input to be sorted > by *all* the columns being distinct'ed, not just one, so again this > index isn't useful. You could get a plan using the index if you only > wanted the <-> output column, eg > > contrib_regression=# explain select distinct t <-> 'foo' from test_trgm order > by t <-> 'foo' limit 10; > QUERY PLAN > ------------------------------------------------------------------------------------- > Limit (cost=0.00..0.87 rows=10 width=12) > -> Unique (cost=0.00..86.75 rows=1000 width=12) > -> Index Scan using ti on test_trgm (cost=0.00..84.25 rows=1000 > width=12) > Order By: (t <-> 'foo'::text) > (4 rows) > > Perhaps it would be close enough to what you want to use DISTINCT ON: > > contrib_regression=# explain select distinct on( t <-> 'foo') *,t <-> 'foo' > from test_trgm order by t <-> 'foo' limit 10; > QUERY PLAN > ------------------------------------------------------------------------------------- > Limit (cost=0.00..0.87 rows=10 width=12) > -> Unique (cost=0.00..86.75 rows=1000 width=12) > -> Index Scan using ti on test_trgm (cost=0.00..84.25 rows=1000 > width=12) > Order By: (t <-> 'foo'::text) > (4 rows) > > regards, tom lane
good tip - it's working thank you Regards Pavel -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers