Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Оптимизация MySQL-запроса
|
|||
|---|---|---|---|
|
#18+
Добрый день всем! Друзья, помогите оптимизировать следующий запрос: 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. Помогите, пожалуйста. Уже больше месяца не могу найти решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2017, 15:35 |
|
||
|
Оптимизация MySQL-запроса
|
|||
|---|---|---|---|
|
#18+
самое простое -- убрать "(SELECT COUNT(url_id) FROM shorten_transits WHERE url_id = postback_flows.url_id) AS transits" из запроса и поставить его после выборки ЛИМИТ 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2017, 16:09 |
|
||
|
Оптимизация MySQL-запроса
|
|||
|---|---|---|---|
|
#18+
типа: 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 и возможно поработать с алиасами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2017, 16:13 |
|
||
|
Оптимизация MySQL-запроса
|
|||
|---|---|---|---|
|
#18+
...да и вообше у вас филтры только по основной таблице, можно сделать елементарную выборку SELECT * FROM (`postback_flows`) WHERE `postback_flows`.`user_id` = '733' AND `postback_flows`.`offer_id` = '320' ORDER BY `id` desc LIMIT 10 ...и на нее навешивать всякие связки и подселекты... ...отдельный вопрос по связкам, где 1:н где н:1 и почему группировка без груповых функций... ...если есть возможность -- покажите специалисту... проанализируйте модел и смысл запроса... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2017, 16:20 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39543414&tid=1830319]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
| others: | 15ms |
| total: | 158ms |

| 0 / 0 |
