2014-01-16 1 views
0

Со следующим запросом я получаю все продукты, перечисленные с более чем одним одним продуктом_model. Точный, что я хочу только ... скорость запроса сосет. Это займет 26 секунд. avarage, чтобы получить данные на экране. index_model индексируется. Не знаю, как ускорить этот запрос. Может, кто-то из вас может мне помочь. Спасибо в продвинутом режиме.проблемы с запросом, показывающие несколько продуктов с одинаковой моделью

SELECT products_model 
FROM products 
WHERE manufacturers_id = 239 
    AND products_model IN (
     SELECT products_model 
     FROM 
     products_guede 
     GROUP BY 
     products_model 
     HAVING count(products_model) > 1 
    ) 
+0

У вас есть все права изменить индекс? возможно, вам следует проверить с помощью dba, чтобы применить индекс для products_model. В противном случае для самого запроса вы должны использовать соединение. См. Ответ ниже. – MrSimpleMind

ответ

1

Не могли бы вы попробовать это?

SELECT p.products_model 
FROM products p INNER JOIN products_guede pg 
ON p.products_model = pg.products_model 
WHERE p.manufacturers_id = 239 
GROUP BY p.products_model 
HAVING COUNT(products_model) > 1 

И следующий указатель может вам помочь.

ALTER TABLE products ADD INDEX(manufacturers_id, products_model); 
ALTER TABLE products_guede ADD INDEX(products_model); 
+0

Правильно! Я забыл оба индекса. Сейчас он работает всего лишь 117 мс. – user3202213

+0

@ user3202213 Мое удовольствие ;-) –

0

SQLFIDDLE

select 
    p.products_model 
from 
    products p 
    left join products_guede pg 
    on p.products_model = pg.products_model 
-- where manufacturers_id in (239,...) 
group by p.products_model 
having count(*) > 1; 
+0

просто добавьте любое условие, которое вы хотите в своем месте where. – MrSimpleMind

0

Действительно, проверка каждого отдельного результата запроса в отношении всех столбцов другой таблицы бы так долго с огромными таблицами (более 1000 записей данных)

Попробуйте это Вместо этого:

SELECT count(*) as model_occurence, products_model 
FROM products_guede 
INNER JOIN products on products.products_model = products_guede.products_model 
WHERE manufacturers_id = 239 
GROUP BY products_guede.products_model; 
Смежные вопросы