Thread: problems: slow queries with tsearch2
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)
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