Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Два запроса в 100 раз быстрее одного, как сделать один быстрее / 7 сообщений из 7, страница 1 из 1
22.02.2014, 11:48:53
    #38569353
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два запроса в 100 раз быстрее одного, как сделать один быстрее
Один запрос:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select 
`article_id`,
concat_ws("-", `ph`.`photo_id`, coalesce(`ph`.`image_file`, 'noimage.png')) as `images`,
`art`.`article`, 
coalesce(`art`.`price_discounted`, ceil( `art`.`price_retail`*`art`.`retail_discount`/10)*10) as `price_discounted`,
coalesce(`ph`.`sort_order`, 1) as `cso`
from `article` as `art`
left join `photo` as `ph`
using(`article_id`)
group by `article_id`, `ph`.`sort_order`
having `article_id` in (47,74,75) 
and `cso`=1;



выполняется в среднем 0.02 с.

Два запроса отжатых из одного выше:

Код: sql
1.
2.
3.
4.
5.
6.
select 
`art`.`article_id`, 
`art`.`article`, 
coalesce(`art`.`price_discounted`, ceil( `art`.`price_retail`*`art`.`retail_discount`/10)*10) as `price_discounted`
from `article` as `art`
where `art`.`article_id` in (47,74,75);



Код: sql
1.
2.
3.
4.
5.
6.
select 
`ph`.`article_id`, 
concat_ws("-", `ph`.`photo_id`, coalesce(`ph`.`image_file`, 'noimage.png')) as `images`
from `photo` as `ph`
where `ph`.`article_id` in (47,74,75) 
and `ph`.`sort_order`=1;



выполняются кажды по 0.001 с, или вместе примерно 0.002 с.

Процедурно обрабатывать результаты двух запросов не очень сложно, но ныне компактная функция обработки мгновенно раздулась при попытке реализовать (до конца не довел увидев как она раздувается).

Вопрос, можно ли сделать один запрос побыстрее чем первый? Я пытался соорудить вложенный силект и обломился. Есть теория что без джойна будет быстрее.
...
Рейтинг: 0 / 0
22.02.2014, 11:51:42
    #38569355
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два запроса в 100 раз быстрее одного, как сделать один быстрее
Логика такова. Есть артикул, у него может быть от 0 и до Х фоток. Артикул надо получить независимо о Х фоток. При этом получить надо только соответствующую единственную или одну фотку если их там до Х.
...
Рейтинг: 0 / 0
22.02.2014, 12:33:25
    #38569367
transpose
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два запроса в 100 раз быстрее одного, как сделать один быстрее
deblogger,

Having замените на where .
...
Рейтинг: 0 / 0
22.02.2014, 13:08:13
    #38569383
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два запроса в 100 раз быстрее одного, как сделать один быстрее
Не могу, там алиас на номер фотки, которого может не быть и приходится заменять null на 1.
...
Рейтинг: 0 / 0
22.02.2014, 13:10:46
    #38569384
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два запроса в 100 раз быстрее одного, как сделать один быстрее
А если не заменять то left join вырождается в inner join с вытекающим отсутствием артикула из-за отсутствия хотя бы одной фотки.
...
Рейтинг: 0 / 0
22.02.2014, 13:11:53
    #38569385
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два запроса в 100 раз быстрее одного, как сделать один быстрее
С inner'ом вообще половину можно выкинут воткнув все условия прямо в join. Но логику я изложил. Артикул нужен всегда, а на фотки - положить.
...
Рейтинг: 0 / 0
22.02.2014, 14:01:14
    #38569406
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два запроса в 100 раз быстрее одного, как сделать один быстрее
debloggerНе могу, там алиас на номер фотки, которого может не быть и приходится заменять null на 1.Можете, используйте полное выражение вместо алиаса. И уж in (47,74,75) точно ничего не мешает перенести в WHERE.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Два запроса в 100 раз быстрее одного, как сделать один быстрее / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]