У меня есть два MySQL запросов, которые выполняются очень быстро, но когда я их совмещаю, новый запрос выполняется очень медленно.MySQL медленный запрос при объединении двух очень быстрых запросов
Fast (< 1 секунда, 15 Результаты):
SELECT DISTINCT
Id, Name, Company_Id
FROM people
where Company_Id in (5295, 1834)
and match(Locations) against('austin')
Быстрая (< 1 секунда, 2970 результаты):
select distinct Company_Id from technologies
where match(Name) against('elastic')
and Company_Id is not null
Когда я объединить эти два так:
SELECT DISTINCT Id, Name, Company_Id
FROM people
where Company_Id in
(select Company_Id from technologies
where match(Name) against('elastic')
and Company_Id is not null
)
and match(Locations) against('austin')
Запрос на результат занимает более 2 минут. У него 278 строк.
Я пробовал переписать медленный запрос несколькими способами. Другой пример такой:
SELECT DISTINCT
`Extent1`.`Id`, `Extent1`.`Name`, `Extent1`.`Company_Id`
FROM `people` AS `Extent1`
INNER JOIN `technologies` AS `Extent2`
ON (`Extent1`.`Company_Id` = `Extent2`.`Company_Id`)
WHERE (`Extent1`.`Company_Id` IS NOT NULL)
AND ((match(`Extent1`.`Locations`) against('austin'))
AND (match(`Extent2`.`Name`) against('elastic')))
Я использую MySQL 5.7 для Windows. У меня есть полный текстовый индекс в столбцах Name и Location. Мое использование буфера InnoDB никогда не превышает 40%. Я попытался использовать рабочий стол MySQL, чтобы посмотреть план выполнения, но он показывает «Объяснить данные, недоступные для справки»
Пожалуйста, дайте мне знать, если вы увидите что-нибудь, что я мог бы улучшить или попробовать. Спасибо.
Я думаю, что последнее предложение ответа Гордона - это вопрос, который стоит рассмотреть. – Strawberry
Да, но местоположения - это не список. Это простой столбец longtext (Entity Framework sourced) с индексом Full Text на нем. У меня такая же проблема с другими столбцами Person (Name и т. Д.), Которые похожи на longtext с индексом FT. – Erik
Мне было бы интересно увидеть вывод 'EXPLAIN' в этом запросе, чтобы узнать, какие таблицы сканируются и где стоимость поиска самая дорогая. – Nathan