Почему mysql не может применить полнотекстовый индекс, если я использую два разных полнотекстовых индекса в двух разных таблицах в одном запросе? - PullRequest
0 голосов
/ 05 августа 2020

Я только что изучил ПОЛНЫЙ ТЕКСТОВЫЙ ПОИСК в Mysql, потому что поиск LIKE '%%' выполняется слишком медленно. У меня есть две таблицы: user (id, email), user_detail (id, user_id, first_name, last_name). Я создал два полнотекстовых индекса для этих таблиц:

ALTER TABLE user ADD FULLTEXT ftidx_email(email)
ALTER TABLE user_detail ADD FULLTEXT ftidx_first_name_last_name(first_name,last_name)

Если я напишу такой запрос:

EXPLAIN SELECT * from user u INNER JOIN user_detail ud ON u.id = ud.user_id WHERE ( MATCH(u.email) AGAINST('abc@gmail.com' 'IN NATURAL LANGUAGE MODE') > 0))

В объяснении таблицы я вижу, что тип - полнотекстовый, а ключ - ftidx_email => так что запрос выполняется быстро.

Если я напишу такой запрос:

EXPLAIN SELECT * from user u INNER JOIN user_detail ud ON u.id = ud.user_id WHERE ( MATCH(ud.fisrt_name, ud.last_name) AGAINST('abc@gmail.com' 'IN NATURAL LANGUAGE MODE') > 0))

В объяснении таблицы я вижу, что тип - полнотекстовый, а ключ - ftidx_first_name_last_name => так запрос тоже выполняется быстро.

Но если 2 использовать оба полнотекстовых индекса, например:

EXPLAIN SELECT * from user u INNER JOIN user_detail ud ON u.id = ud.user_id WHERE ( MATCH(u.email) AGAINST('abc@gmail.com' 'IN NATURAL LANGUAGE MODE') > 0 OR 
MATCH(ud.first_name, ud.last_name) AGAINST('abc@gmail.com' 'IN NATURAL LANGUAGE MODE') > 0 )

В пояснении таблицы я вижу, что тип - ALL, а ключ - NULL => так запрос выполняется медленно.

Почему Mysql не может применить два разных полнотекстовых индекса к двум разным таблицам в одном запросе? Или где я не прав? Пожалуйста, помогите мне.

...