Задавайте вопросы, мы ответим
Вы не зашли.
Прошу помочь оптимизировать запрос:
select A.BRAND
FROM OFFER A
WHERE A.CATID=90566 AND
A.ADVID IN (289,5071,5305,6125,15088,15261,16057,18661,27600,34140)
GROUP BY A.BRAND
Запрос упорно не хочет использовать индексы. Для таблицы с 2 миллионами записей он выполняется 1-5 секунд.
EXPLAIN пишет: Using where; Using temporary; Using filesort
Для таблицы OFFER существует индекс:
CREATE INDEX ix_offer_5 on OFFER (CATID,ADVID,BRAND)
но он игнорируется, видимо из-за того, что для A.ADVID в условии WHERE указан список значений.
Помогите подобрать правильный индекс для запроса или перестроить запрос так, чтобы использовался индекс для всех колонок запроса.
Колонки CATID и ADVID - числовые, BRAND - строковая.
Неактивен
Ну, точно должна помочь перестройка запроса в страшном виде
select A.BRAND FROM OFFER A WHERE A.CATID=90566 AND A.ADVID=289 GROUP BY A.BRAND
UNION
select A.BRAND FROM OFFER A WHERE A.CATID=90566 AND A.ADVID=5071 GROUP BY A.BRAND
UNION
...
UNION
select A.BRAND FROM OFFER A WHERE A.CATID=90566 AND A.ADVID=34140 GROUP BY A.BRAND
при такой постановке индекс должен использоваться на все сто.
Неактивен