problems: slow queries with tsearch2

Started by Rafa Cominoabout 19 years ago2 messagesgeneral
Jump to latest
#1Rafa Comino
rafacomino@gmail.com

Hi from Spain,

I have a problem with TSearch2,

I have a table with more than a million registers (a table of books, for
example),

I made a tsearch2 index for one of my fields (the title of the books, for
example),

I make queries from that table, over the tsearch2 index. Then some of my
queries get too much slowly, and I don't know how to resolve it. For
example:

- Every thing is ok, but when the query get a lot of results (about
1000 register) and I use ORDER BY over other field in the query (even if I
use LIMIT 10) the query gets slowly, 7 or 8 seconds. The thing is, that
query gets all the results and later order those results, and that makes my
query so slow. How can I resolve this.
- When my queries have two conditions joined with AND, and each
condition is made over a different tsearch2 index, the execution get first x
rows from the first condition, and y rows from the second condition, later
get the rows from both result set. This makes my queries slow too. How could
I resolve this?.

(Sorry for my English, and thanks for reading me)

#2Ian Harding
harding.ian@gmail.com
In reply to: Rafa Comino (#1)
Re: problems: slow queries with tsearch2

On 2/16/07, Rafa Comino <rafacomino@gmail.com> wrote:

Hi from Spain,

I have a problem with TSearch2,

I have a table with more than a million registers (a table of books, for
example),

I made a tsearch2 index for one of my fields (the title of the books, for
example),

I make queries from that table, over the tsearch2 index. Then some of my
queries get too much slowly, and I don't know how to resolve it. For
example:
Every thing is ok, but when the query get a lot of results (about 1000
register) and I use ORDER BY over other field in the query (even if I use
LIMIT 10) the query gets slowly, 7 or 8 seconds. The thing is, that query
gets all the results and later order those results, and that makes my query
so slow. How can I resolve this.
When my queries have two conditions joined with AND, and each condition is
made over a different tsearch2 index, the execution get first x rows from
the first condition, and y rows from the second condition, later get the
rows from both result set. This makes my queries slow too. How could I
resolve this?.

(Sorry for my English, and thanks for reading me)

I use tsearch and have never found it to be slow, so I wonder if you
have indexes on the tsvector columns in your tables and if you have
vacuumed recently? Something like this..

CREATE INDEX idxFTI_idx ON tblMessages USING gist(idxFTI);
VACUUM FULL ANALYZE;

Also, if you have other conditions in your query they will want to
have valid indexes to use as well.

If you post an EXPLAIN and/or EXPLAIN ANALYZE output more people will
probably chime in.

- Ian