Медленный поиск по полю в БД - MySQL
Формулировка задачи:
Здравствуйте. Помогите пожалуйста оптимизировать поиск по полю в базе данных. Уж очень медленно работает.
В базе данных имеется таблица компаний, в которой хранится порядка двух миллионов строк.
Также имеется таблица контактов компаний, связанная с таблицей компаний по идентификатору.
В таблице контактов имеется проиндексированное поле `name`.
Понимаю, что проблема в метасимволе '%', стоящим в начале шаблона поиска, но мне как раз и нужно, чтобы в результат попадали все компании, даже если в них работает некий 'Di
Задача:
вывести все идентификаторы компаний, в которых работают, скажем, некие Джоны. С любой фамилией. Запрос выглядит так:SELECT CrmCompany.id FROM crm_company AS CrmCompany, crm_company_member AS CrmCompanyMember WHERE CrmCompany.id = CrmCompanyMember.company_id AND CrmCompanyMember.name LIKE '%John%'
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
Объяснение кода листинга программы
- В данном коде используется операция SQL JOIN для объединения двух таблиц: crm_company и crm_company_member.
- В подзапросе (внутреннем запросе) выбирается id компании из таблицы crm_company_member, где имя содержит 'John'.
- Во внешнем запросе происходит выборка id компании из таблицы crm_company, где этот id соответствует id компании из подзапроса.
- Оператор WHERE используется для фильтрации результатов выборки.
- В итоге получаем id компании, которая соответствует условию подзапроса.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д