Медленный поиск по полю в БД - MySQL

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Помогите пожалуйста оптимизировать поиск по полю в базе данных. Уж очень медленно работает. В базе данных имеется таблица компаний, в которой хранится порядка двух миллионов строк. Также имеется таблица контактов компаний, связанная с таблицей компаний по идентификатору. В таблице контактов имеется проиндексированное поле `name`.

Задача:

вывести все идентификаторы компаний, в которых работают, скажем, некие Джоны. С любой фамилией. Запрос выглядит так:
SELECT CrmCompany.id
FROM crm_company AS CrmCompany, crm_company_member AS CrmCompanyMember
WHERE CrmCompany.id = CrmCompanyMember.company_id AND CrmCompanyMember.name LIKE '%John%'
Понимаю, что проблема в метасимволе '%', стоящим в начале шаблона поиска, но мне как раз и нужно, чтобы в результат попадали все компании, даже если в них работает некий 'Di

john

son'. Может есть какая-то альтернатива? Заранее спасибо!

Решение задачи: «Медленный поиск по полю в БД»

textual
Листинг программы
SELECT CrmCompany.id
FROM
  crm_company AS CrmCompany,
  (select company_id from  crm_company_member where name LIKE '%John%') CrmCompanyMember 
WHERE CrmCompany.id = CrmCompanyMember.company_id

Объяснение кода листинга программы

  1. В данном коде используется операция SQL JOIN для объединения двух таблиц: crm_company и crm_company_member.
  2. В подзапросе (внутреннем запросе) выбирается id компании из таблицы crm_company_member, где имя содержит 'John'.
  3. Во внешнем запросе происходит выборка id компании из таблицы crm_company, где этот id соответствует id компании из подзапроса.
  4. Оператор WHERE используется для фильтрации результатов выборки.
  5. В итоге получаем id компании, которая соответствует условию подзапроса.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.4 из 5