У меня в настоящее время проблема с SQL-запросом. У меня есть таблица продуктов, которая содержит поле colour_code. Я не могу изменить таблицу продуктов, поскольку она берется из внешнего источника.Проблема с запросом на соединение Mysql
На веб-сайте пользователь может искать продукт по colour_code и возвращать все продукты, доступные в этом цвете.
Задача заключается в том, чтобы иметь другой поисковый запрос, возвращающий определенный продукт, который имеет другой цветовой код. Для этого я добавил новую таблицу с именем colour_code_alias, которая просто имеет поле colour_code, которое соответствует полю colour_code в таблице продуктов и полю псевдонима, которое вернет этот результат. См. Примеры ниже.
**Product_tb**
id, colour_code
1, "ABC"
**colour_code_alias_td**
colour_code,alias
"ABC","XYZ"
Таким образом, если пользователь ищет XYZ, они должны быть возвращены продукт с идентификатором 1. Если они ищут «ABC», они также должны быть возвращены продукт с идентификатором 1.
Моя проблема заключается в том, что запрос занимает слишком много времени, так как он не использует индекс. Мой упрощенный запрос ниже:
Select * from product
left join colour_code_alias cca on cca.colour_code = product.colour_code
where (product.colour_code = 'XYZ' or cca.alias = "XYZ")
Когда я использую объяснение, он показывает, что он не использует ключ для этого запроса. Когда я удаляю 'или cca.alias = "XYZ" в предложении where, используется индекс colour_code из таблицы продуктов.
Я ищу помощь, чтобы повысить производительность такого запроса, как я должен индексировать этот тип запроса или даже переписывать его?
Любая помощь приветствуется.
Thanks, Martin.
как примечание относительно того, что я сделал .. Я удалил левое соединение и добавил запрос выбора в предложение where. Запрос выглядит так:
Select * from product
where (product.colour_code = 'XYZ' or product.colour_code = (select colour_code from colour_code_alias where alias = 'XYZ'));
индексируется cca.alias? – mconlin
да ... Я протестировал, используя 3 индекса на этом .. colour_code, alias и составной индекс colour_code_alias. – Martin