SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 09.08.2012 13:35:22

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

Отработка запроса около 2 сек. Как его оптимизировать?

Не знаю как бы проще оптимизировать запрос. Помогите пожалуйста.
Много селектов, но не знаю чем их заменить smile


SELECT DISTINCT (
i.id
), i.title, i.link, i.price, i.in_stock, i.imgs, i.cat_id, i.artikul
FROM items i, goods_params gp
WHERE i.id = gp.good_id
AND i.cat_id =13
AND (
(

SELECT COUNT( * )
FROM goods_params gp1
WHERE (
gp1.param_id =53
)
AND i.id = gp1.good_id
) >0
)
AND (
(

SELECT COUNT( * )
FROM goods_params gp2
WHERE (
gp2.param_id =73
OR gp2.param_id =77
OR gp2.param_id =80
)
AND i.id = gp2.good_id
) >0
)
AND (

SELECT COUNT( * )
FROM related_doogs rg
WHERE i.id = rg.good_id
) =0
ORDER BY price ASC


Отображает строки 0 - 7 ( 8 всего, запрос занял 1.9268 сек.)

Неактивен

 

#2 16.08.2012 14:53:01

inkognitotester
Участник
Зарегистрирован: 15.05.2012
Сообщений: 12

Re: Отработка запроса около 2 сек. Как его оптимизировать?

а explain этих запросов можно увидеть?

Неактивен

 

#3 16.08.2012 21:36:24

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: Отработка запроса около 2 сек. Как его оптимизировать?

Вот попробуйте

SELECT DISTINCT ...
FROM goods_params gp
left join items i on(gp.good_id=i.id)
inner join related_doogs rg on(i.id = rg.good_id)
where i.cat_id =13 and  gp.param_id in(53,73,77,80)
ORDER BY price ASC

Отредактированно evgeny (16.08.2012 21:39:53)

Неактивен

 

Board footer

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