powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Оптимизация MySQL-запроса
4 сообщений из 4, страница 1 из 1
Оптимизация MySQL-запроса
    #39543369
Антон777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день всем!
Друзья, помогите оптимизировать следующий запрос:

SELECT
`postback_flows`.*,
`shorten_links`.`shorten_url`,
`offers_postback`.`name` AS offer_name,
(SELECT COUNT(*) FROM shorten_transits WHERE url_id = postback_flows.url_id) AS transits,
(SELECT COUNT(*) FROM postback_requests WHERE flow_id = postback_flows.id) AS requests
FROM (`postback_flows`)
LEFT JOIN `offers_postback` ON `offers_postback`.`id` = `postback_flows`.`offer_id`
LEFT JOIN `postback_requests` ON `postback_requests`.`flow_id` = `postback_flows`.`id`
LEFT JOIN `shorten_links` ON `shorten_links`.`id` = `postback_flows`.`url_id`
WHERE `postback_flows`.`user_id` = '733'
AND `postback_flows`.`offer_id` = '320'
GROUP BY `postback_flows`.`id`
ORDER BY `id` desc
LIMIT 10

Основная нагрузка, как я понял, приходится на "(SELECT COUNT(url_id) FROM shorten_transits WHERE url_id = postback_flows.url_id) AS transits" - если убрать этот фрагмент, то запрос срабатывает довольно быстро. Для сведения: таблица shorten_transits содержит на данный момент 245550 строк, а столбцов в ней 19. Помогите, пожалуйста. Уже больше месяца не могу найти решение.
...
Рейтинг: 0 / 0
Оптимизация MySQL-запроса
    #39543399
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
самое простое -- убрать
"(SELECT COUNT(url_id) FROM shorten_transits WHERE url_id = postback_flows.url_id) AS transits"
из запроса и поставить его после выборки ЛИМИТ 10.
...
Рейтинг: 0 / 0
Оптимизация MySQL-запроса
    #39543404
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
типа:

SELECT
(SELECT COUNT(*) FROM shorten_transits WHERE url_id = postback_flows.url_id) AS transits,
(SELECT COUNT(*) FROM postback_requests WHERE flow_id = postback_flows.id) AS requests,
*
FROM
(
SELECT
`postback_flows`.*,
`shorten_links`.`shorten_url`,
`offers_postback`.`name` AS offer_name,
-- (SELECT COUNT(*) FROM shorten_transits WHERE url_id = postback_flows.url_id) AS transits,
-- (SELECT COUNT(*) FROM postback_requests WHERE flow_id = postback_flows.id) AS requests
FROM (`postback_flows`)
LEFT JOIN `offers_postback` ON `offers_postback`.`id` = `postback_flows`.`offer_id`
LEFT JOIN `postback_requests` ON `postback_requests`.`flow_id` = `postback_flows`.`id`
LEFT JOIN `shorten_links` ON `shorten_links`.`id` = `postback_flows`.`url_id`
WHERE `postback_flows`.`user_id` = '733'
AND `postback_flows`.`offer_id` = '320'
GROUP BY `postback_flows`.`id`
ORDER BY `id` desc
LIMIT 10
) z

...ну надо подправить связки, поменять
url_id = postback_flows.url_id
на
url_id = z.url_id
и возможно поработать с алиасами
...
Рейтинг: 0 / 0
Оптимизация MySQL-запроса
    #39543414
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...да и вообше у вас филтры только по основной таблице,
можно сделать елементарную выборку

SELECT
*
FROM (`postback_flows`)
WHERE `postback_flows`.`user_id` = '733'
AND `postback_flows`.`offer_id` = '320'
ORDER BY `id` desc
LIMIT 10

...и на нее навешивать всякие связки и подселекты...


...отдельный вопрос по связкам, где 1:н где н:1
и почему группировка без груповых функций...

...если есть возможность -- покажите специалисту...
проанализируйте модел и смысл запроса...
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Оптимизация MySQL-запроса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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