powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / можно ли с оптимизировать этот запрос?
25 сообщений из 58, страница 1 из 3
можно ли с оптимизировать этот запрос?
    #38686128
Фотография alexnews
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте уважаемые ГУРУ!

Есть запрос:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SELECT
                    `media_type`,
                    sum(`imp`) `imp`,
                    sum(`spend`) `spend`,
                    sum(`revenue`) `revenue`
                FROM (
                    SELECT
                        if(`s`.`media_type` = 'ded', 'ded', 'news') `media_type`,
                        `d`.`imp` `imp`,
                        if(`c`.`dsp_fee`,(`d`.`Spend`) / (100 - `c`.`dsp_fee`) / 100,`d`.`Spend`) `spend`,
                        `d`.`Revenue` `revenue`
                    FROM
                        `daily_stats` `d`
                        left join `strat` `s` on `s`.`userver_id` = `d`.`LineItemID`
                        left join `camp` `c` on `c`.`id` = `s`.`campaign_id`
                    WHERE
                        `day` BETWEEN '2014-06-01’ AND ‘2014-06-30'
                        and `demand_type` = 'exchange'
                ) `TEST`
                GROUP BY
                    `media_type`;



работает 4 минуты на локальной машине, если меняю дату выборки на 2014-06-10 то те же 4 минуты. В таблице daily_stats 10 млн записей. На реальных данных это более 30млн записей работает более 9 часов, что тут не правильно? Заранее благодарен за любой совет.
...
Рейтинг: 0 / 0
можно ли с оптимизировать этот запрос?
    #38686142
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Для всех упоминаемых полей укажите имя таблицы или ее алиас
2) Для всех упоминаемых таблиц приведите их DDL, включая индексы.
3) Покажите план запроса.
4) Поясните словами, как поле `dsp_fee` взаимодействует с полем `Spend`. Есть подозрение на ошибку в арифметике.
...
Рейтинг: 0 / 0
можно ли с оптимизировать этот запрос?
    #38686143
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexnews,


1. покажите
show create table ....
для всех таблиц

2. покажите EXPLAIN этого запроса.

3. в явном виде указывайте табличный алиас для всех полей.
Например из какой таблицы `day` BETWEEN '2014-06-01’ AND ‘2014-06-30' ?
...
Рейтинг: 0 / 0
можно ли с оптимизировать этот запрос?
    #38686145
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft, :-)
...
Рейтинг: 0 / 0
можно ли с оптимизировать этот запрос?
    #38686146
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
5) Какие значения вообще может принимать поле `s`.`media_type` ?
...
Рейтинг: 0 / 0
можно ли с оптимизировать этот запрос?
    #38686150
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а этот сколько работает?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SELECT
                        if(`s`.`media_type` = 'ded', 'ded', 'news') `media_type`,
                        sum(`d`.`imp`) `imp`,
                        sum(if(`c`.`dsp_fee`,(`d`.`Spend`) / (100 - `c`.`dsp_fee`) / 100,`d`.`Spend`)) `spend`,
                        sum(`d`.`Revenue`) `revenue`

                FROM 
                        `daily_stats` `d`
                        left join `strat` `s` on `s`.`userver_id` = `d`.`LineItemID`
                        left join `camp` `c` on `c`.`id` = `s`.`campaign_id`
                    WHERE
                        `day` BETWEEN '2014-06-01' AND '2014-06-30'
                        and `demand_type` = 'exchange'
                GROUP BY
                    `media_type`;

кстати, вот тут
Код: sql
1.
if(`c`.`dsp_fee`,(`d`.`Spend`) / (100 - `c`.`dsp_fee`) / 100,`d`.`Spend`)


надо бы, наверное, сравнение какое-то вставить, нет?
...
Рейтинг: 0 / 0
можно ли с оптимизировать этот запрос?
    #38686176
Фотография alexnews
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ухх спасибо не ожидал такого отклика

Запрос:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SELECT
                    `media_type`,
                    sum(`impressions`) `impressions`,
                    sum(`spend`) `spend`,
                    sum(`revenue`) `revenue`
                FROM (
                    SELECT
                        if(`s`.`media_type` = 'dedicated', 'dedicated', 'newsletter') `media_type`,
                        `d`.`impressions` `impressions`,
                        if(`c`.`dsp_fee`,(`d`.`Spend`) / (100 - `c`.`dsp_fee`) / 100,`d`.`Spend`) `spend`,
                        `d`.`Revenue` `revenue`
                    FROM
                        `daily_stats` `d`
                        left join `zf_strategies` `s` on `s`.`userver_id` = `d`.`LineItemID`
                        left join `zf_campaigns` `c` on `c`.`id` = `s`.`campaign_id`
                    WHERE
                        `day` BETWEEN '2014-06-01’ AND ‘2014-06-30'
                        and `demand_type` = 'exchange'
                ) `TEST`
                GROUP BY
                    `media_type`;



EXPLAIN:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
+----+-------------+------------+--------+---------------------------+---------------------------+---------+-------------------+---------+---------------------------------+
| id | select_type | table      | type   | possible_keys             | key                       | key_len | ref               | rows    | Extra                           |
+----+-------------+------------+--------+---------------------------+---------------------------+---------+-------------------+---------+---------------------------------+
|  1 | PRIMARY     | <derived2> | ALL    | NULL                      | NULL                      | NULL    | NULL              | 9955416 | Using temporary; Using filesort |
|  2 | DERIVED     | d          | ALL    | NULL                      | NULL                      | NULL    | NULL              | 9955416 |                                 |
|  2 | DERIVED     | s          | ref    | idx_strategies_userver_id | idx_strategies_userver_id | 4       | lfx.d.LineItemID  |       1 |                                 |
|  2 | DERIVED     | c          | eq_ref | PRIMARY                   | PRIMARY                   | 96      | lfx.s.campaign_id |       1 | Using where                     |
+----+-------------+------------+--------+---------------------------+---------------------------+---------+-------------------+---------+---------------------------------+
4 rows in set, 65535 warnings (3 min 51.89 sec)
таблицы тут описаны: http://www.describe.ru/sql.txt, не хочу тут светить то чего не смогу удалить

tanglir, ваш запрос работает

Код: plaintext
1.
2.
3.
4.
5.
6.
+------------+-------------+-----------------------+---------------+
| media_type | impressions | spend                 | revenue       |
+------------+-------------+-----------------------+---------------+

+------------+-------------+-----------------------+---------------+
3 rows in set, 1 warning (3 min 44.66 sec)
Заранее спасибо за советы, я такие запросы никогда не строил
...
Рейтинг: 0 / 0
можно ли с оптимизировать этот запрос?
    #38686180
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexnewsваш запрос работаетпопробуйте group by 1, у вас алиас поля результата совпадает с названием поля таблицы
...
Рейтинг: 0 / 0
можно ли с оптимизировать этот запрос?
    #38686192
Фотография alexnews
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglir,

я имею в виду он работает немного быстрее, стараюсь быстро ответить и при этом попытаться поменять как посоветовал miksoft. Одно не пойму как это 2) Для всех упоминаемых таблиц приведите их DDL, включая индексы. Можно пример?
...
Рейтинг: 0 / 0
можно ли с оптимизировать этот запрос?
    #38686197
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexnews,

show create table table_name

выдаёт практически то, что вы выложили + описание индексов

и покажите эксплейн моего варианта
...
Рейтинг: 0 / 0
можно ли с оптимизировать этот запрос?
    #38686204
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexnews,

для начала создайте индекс по daily_stats.day
...
Рейтинг: 0 / 0
можно ли с оптимизировать этот запрос?
    #38686219
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обнаружил попутно баг на склфидле:

1)создаём пустую схему
2)выполняем
Код: sql
1.
select if(NULL = 'ded', 'ded', 'news')


3)нажимаем "отформатировать код", и вуаля, в окошке с кодом получаем
Код: sql
1.
2.
3.
4.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>405 Method Not Allowed</title>
<h1>Method Not Allowed</h1>
<p>The method is not allowed for the requested URL.</p>

, при этом текст запроса теряется

Так и не нашёл там ни формы обратной связи, ни мыла. Не регистрироваться же в твиттере, чтобы им багрепорт через него отправить :)
...
Рейтинг: 0 / 0
можно ли с оптимизировать этот запрос?
    #38686220
Фотография alexnews
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglir,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
+----+-------------+-------+--------+-----------------------------------------------------+---------------------------+---------+-------------------+---------+----------------------------------------------+
| id | select_type | table | type   | possible_keys                                       | key                       | key_len | ref               | rows    | Extra                                        |
+----+-------------+-------+--------+-----------------------------------------------------+---------------------------+---------+-------------------+---------+----------------------------------------------+
|  1 | SIMPLE      | d     | ALL    | un_daily_stats,Day,LineItemID                       | NULL                      | NULL    | NULL              | 9955416 | Using where; Using temporary; Using filesort |
|  1 | SIMPLE      | s     | ref    | idx_strategies_userver_id,fk_strategies_campaign_id | idx_strategies_userver_id | 4       | lfx.d.LineItemID  |       1 | Using where                                  |
|  1 | SIMPLE      | c     | eq_ref | PRIMARY                                             | PRIMARY                   | 96      | lfx.s.campaign_id |       1 | Using where                                  |
+----+-------------+-------+--------+-----------------------------------------------------+---------------------------+---------+-------------------+---------+----------------------------------------------+
3 rows in set, 1 warning (0.00 sec)

mysql> show warnings;
+---------+------+-----------------------------------------------------+
| Level   | Code | Message                                             |
+---------+------+-----------------------------------------------------+
| Warning | 1052 | Column 'media_type' in group statement is ambiguous |
+---------+------+-----------------------------------------------------+
1 row in set (0.00 sec)

Модератор: Пожалуйста, пользуйтесь тэгами для оформления ваших постов. В ваших же интересах сделать так, чтобы ваши посты было легче читать. Нечитаемые посты никто не любит.
...
Рейтинг: 0 / 0
можно ли с оптимизировать этот запрос?
    #38686224
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglir
Код: sql
1.
select if(NULL = 'ded', 'ded', 'news')

Или уже исправили, или этот баг связан с чем-то другим. Сейчас работает исправно.
...
Рейтинг: 0 / 0
можно ли с оптимизировать этот запрос?
    #38686230
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexnewsне хочу тут светить то чего не смогу удалитьТут можно воспользоваться ссылкой "сообщить моедратору" и попросить что-то удалить/отредактировать. Но срочности не обещаю.
...
Рейтинг: 0 / 0
можно ли с оптимизировать этот запрос?
    #38686234
Фотография alexnews
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,

спасибо, буду знать
...
Рейтинг: 0 / 0
можно ли с оптимизировать этот запрос?
    #38686236
Фотография alexnews
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,

это я пытался шифроваться сокращая переменные
...
Рейтинг: 0 / 0
можно ли с оптимизировать этот запрос?
    #38686253
Фотография alexnews
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javajdbc,

Извиняюсь а зачем создавать индекс для поля, которое итак вроде бы упорядочено? Или я чего-то не понимаю?
...
Рейтинг: 0 / 0
можно ли с оптимизировать этот запрос?
    #38686262
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexnewsjavajdbc,

Извиняюсь а зачем создавать индекс для поля, которое итак вроде бы упорядочено? Или я чего-то не понимаю?


Или!

ОБЯЗАТЕЛЬНО создайте индекс и посмотрите результат :-)
...
Рейтинг: 0 / 0
можно ли с оптимизировать этот запрос?
    #38686266
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javajdbcalexnewsjavajdbc,

Извиняюсь а зачем создавать индекс для поля, которое итак вроде бы упорядочено? Или я чего-то не понимаю?


Или!

ОБЯЗАТЕЛЬНО создайте индекс и посмотрите результат :-)Я, кстати, тоже не понимаю. Как минимум, не хватает информации о порядке полей в индексах.

И, если не ошибаюсь, оба LEFT JOIN-а фактически превращаются в просто JOIN-ы из-за `demand_type` = 'exchange'.
Если так и нужно, то лучше исправить JOIN-ы явно.
...
Рейтинг: 0 / 0
можно ли с оптимизировать этот запрос?
    #38686305
Фотография alexnews
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexnews,

это должно выглядеть так:

Код: plsql
1.
select if(NULL = 'dedicated', 'dedicated', 'newsletter')
...
Рейтинг: 0 / 0
можно ли с оптимизировать этот запрос?
    #38686321
Фотография alexnews
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javajdbc,

я извиняюсь за свою тупость. Индекс я создал но как я в этом запросе его могу применить подскажите, пожалуйста
...
Рейтинг: 0 / 0
можно ли с оптимизировать этот запрос?
    #38686324
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexnewsкак я в этом запросе его могу применить подскажите, пожалуйстаИндекс MySQL применит самостоятельно, если с его точки зрения это имеет смысл.
Проверьте время выполнения запроса еще несколько раз и покажите его новый план.
...
Рейтинг: 0 / 0
можно ли с оптимизировать этот запрос?
    #38686327
Фотография alexnews
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,

убрал LEFT, время не изменилось, да и везде пишут что от вида JOIN скорость не зависит или они не правы? Это интересно чисто для себя.
...
Рейтинг: 0 / 0
можно ли с оптимизировать этот запрос?
    #38686331
Фотография alexnews
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
+----+-------------+------------+--------+---------------------------+---------------------------+---------+-------------------+---------+---------------------------------+
| id | select_type | table      | type   | possible_keys             | key                       | key_len | ref               | rows    | Extra                           |
+----+-------------+------------+--------+---------------------------+---------------------------+---------+-------------------+---------+---------------------------------+
|  1 | PRIMARY     | <derived2> | ALL    | NULL                      | NULL                      | NULL    | NULL              | 9955416 | Using temporary; Using filesort |
|  2 | DERIVED     | d          | ALL    | NULL                      | NULL                      | NULL    | NULL              | 9955416 |                                 |
|  2 | DERIVED     | s          | ref    | idx_strategies_userver_id | idx_strategies_userver_id | 4       | lfx.d.LineItemID  |       1 |                                 |
|  2 | DERIVED     | c          | eq_ref | PRIMARY                   | PRIMARY                   | 96      | lfx.s.campaign_id |       1 | Using where                     |
+----+-------------+------------+--------+---------------------------+---------------------------+---------+-------------------+---------+---------------------------------+
4 rows in set, 65535 warnings (3 min 49.40 sec)



я вот не пойму где тут применяется мои индекс который я создал командой
Код: plsql
1.
create index index_daily_stat_by_day ON daily_stats(day);
...
Рейтинг: 0 / 0
25 сообщений из 58, страница 1 из 3
Форумы / MySQL [игнор отключен] [закрыт для гостей] / можно ли с оптимизировать этот запрос?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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