Роберт
Аналитик
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?
Есть текстовая база данных (почти 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?