Я только что изучил ПОЛНЫЙ ТЕКСТОВЫЙ ПОИСК в 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 не может применить два разных полнотекстовых индекса к двум разным таблицам в одном запросе? Или где я не прав? Пожалуйста, помогите мне.