> > The WHERE-clause for these searches sometimes is a combination 
> > of different columns in the table, and I have noticed some 
> > very sub-optimal index-usage
>
> Adding correct estimations for MATCH is in todo.
> Until it's done you can use USE_INDEX/IGNORE_INDEX as a simple 
> workaround.

FORCE_INDEX works in this case. I don't think USE_INDEX does since the FTS
index always reports one match and that overrides the USE_INDEX hint.

However, at this point the FTS index is not used at all. If the original
poster was always doing a query where the other columns narrowed down the
matches significantly, then it would be decided to never really use the full
text index.

Say in the fictional case of a table of messages that belong to a million
different forums. When searching inside one forum, the fulltext index would
likely always have more matches than the key on the forumid.

This won't really get fixed unless you can do a composite index of normal
and fulltext indexes.

Even with tsearch2 which is coming in Postgres 7.4, it doesn't let you do a
composite index. :( It does have some nice language configuration stuff (for
example, you can tell it that it is to be parsed as English and it will then
send it to an English stemmer and an English stopword list -- I don't know
if you can preprocess it ).

There is a very ugly workaround on this. You could fake a composite index.
Assuming that you create a separate copied table for FTS, in that table scan
all the words in the document and prefix them with the other column. First
drop all the one and two character words (and the stopwords) yourself. Then
insert something like this as the message "f31334wanted f31334say
f31334hello" instead of "I wanted to say hello". Do the same with the search
and suddenly things work a lot faster. And uglier...

Sincerely,
Steven Roussey
http://Network54.com/ 




--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to