Cкорость Union и OR

Роберт

Аналитик
Cкорость Union и OR

Есть текстовая база данных (почти 4Gb) с полями: a1 , a2 , a3 , B1 , B2 , B3.
Есть два полнотекстовых индекса. В одном поля (a1 , a2 , a3) , в другом (B1 , B2 , B3).

Если делать запрос
select * from Tablica where match(a1,a2,a3) against ('абвгд') or match(B1,B2,B3) against ('абвгд');
- время выполнения будет 0.69 секунды

Если делать запрос
select * from Tablica where match(a1,a2,a3) against ('абвгд')
union
select * from Tablica where match(B1,B2,B3) against ('абвгд');

- время выполнения будет 0.03 секунды

Причём в независимости от запрашиваемых данных и даже если делать поиск не в двух разных полнотекстовых индексах , а дважды искать в одном и том же - всё равно результаты скорости примено такиеже.

У кого-нибудь есть педположение - почему при использовании OR получается более чем в 20 раз медленне чем через Union?
 

camka

не самка
mysql пока что умеет использовать только один индекс на таблицу в одном запросе.
 

Роберт

Аналитик
camka
Так ведь я говорил - "даже если искать дважды в одном и том же".

Например запрос:
select * from Tablica where match(a1,a2,a3) against ('абвгд') or match(a1,a2,a3) against ('абвгд');
тоже будет выполняться 0.69 секунды (тут один индекс и даже информация ищется одна).

Да и к тому же использование одного индекса - это было в MySQL до версии 5.0 (я об этом не сказал сразу - у меня MySQL 5.0.18)
 

camka

не самка
Роберт

Мануал:
Index Merge is not applicable to fulltext indexes. We plan to extend it to cover these in a future MySQL release.
 
Сверху