powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Два запроса в 100 раз быстрее одного, как сделать один быстрее
7 сообщений из 7, страница 1 из 1
Два запроса в 100 раз быстрее одного, как сделать один быстрее
    #38569353
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Один запрос:

Код: 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
Два запроса в 100 раз быстрее одного, как сделать один быстрее
    #38569355
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Логика такова. Есть артикул, у него может быть от 0 и до Х фоток. Артикул надо получить независимо о Х фоток. При этом получить надо только соответствующую единственную или одну фотку если их там до Х.
...
Рейтинг: 0 / 0
Два запроса в 100 раз быстрее одного, как сделать один быстрее
    #38569367
transpose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
deblogger,

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


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