SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 18.05.2013 10:41:56

Tovarix
Участник
Зарегистрирован: 18.05.2013
Сообщений: 1

Помогите оптимизировать запрос

Прошу помочь оптимизировать запрос:

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 - строковая.

Неактивен

 

#2 18.05.2013 15:48:49

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Помогите оптимизировать запрос

Ну, точно должна помочь перестройка запроса в страшном виде

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


при такой постановке индекс должен использоваться на все сто.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson