powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / можно ли с оптимизировать этот запрос?
58 сообщений из 58, показаны все 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
можно ли с оптимизировать этот запрос?
    #38686332
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexnewsmiksoft,

убрал LEFT, время не изменилось, да и везде пишут что от вида JOIN скорость не зависит или они не правы? Это интересно чисто для себя.По-разному бывает. Если оптимизатор MySQL решит изменить направление выполнения JOIN-а (LEFT JOIN всегда выполняется слева направо, а JOIN - в любую сторону по выбору оптимизатора), то скорость изменится. Если в секции WHERE есть условия на "необязательную" таблицу (которая после LEFT JOIN), то после смены на просто JOIN может задействоваться другой индекс и время опять изменится.
...
Рейтинг: 0 / 0
можно ли с оптимизировать этот запрос?
    #38686334
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexnewsmiksoft,

Код: 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);

а он тут и не применяется.
javajdbc, надеюсь, объяснит свою мысль насчет этого индекса.

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


так, теперь я ничего не понимаю :-)
разве `day` BETWEEN '2014-06-01' AND '2014-06-30'
не достаточно селективно?
или там все 10 млн записей призошли недавно?


Потом непонятки с експлейном, в одном експлейне
в даилы_статс есть индексы, в сругом их нет...
...
Рейтинг: 0 / 0
можно ли с оптимизировать этот запрос?
    #38686341
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javajdbcразве `day` BETWEEN '2014-06-01' AND '2014-06-30'
не достаточно селективно?Может и нет, это только топикстартер может сказать.
...
Рейтинг: 0 / 0
можно ли с оптимизировать этот запрос?
    #38686342
Фотография alexnews
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,

спасибо что до сих пор проявляете интерес

заапдейтил файлик http://www.describe.ru/sql.txt
...
Рейтинг: 0 / 0
можно ли с оптимизировать этот запрос?
    #38686345
Фотография alexnews
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javajdbc,
за месяц набегает 10млн записей это база только одного месяца обычно запрос за квартал
...
Рейтинг: 0 / 0
можно ли с оптимизировать этот запрос?
    #38686354
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexnews,


ок, разберемся с данными.
Допустим у вас Х млн записвй всего в таблице.
Если больше 20% из них попадает в выборку
то индексы бесполезны и будет перебор по всем Х милионам.

просто сделайте:

Код: sql
1.
2.
select count(TemplateID > 0) 
from daily_stats



Код: sql
1.
2.
3.
select count(TemplateID > 0) 
from daily_stats
where day BETWEEN '2014-06-01' AND '2014-06-30'



выдайте результат и скорость обоих запросов.


далее сделайте тоже самое (результат и скорость) для

Код: sql
1.
2.
3.
4.
select count(TemplateID > 0) 
from `daily_stats` `d`
 left join `strat` `s` on `s`.`userver_id` = `d`.`LineItemID`
where day BETWEEN '2014-06-01' AND '2014-06-30'



Код: sql
1.
2.
3.
4.
5.
6.
select count(TemplateID   > 0) 
from `daily_stats` `d`
      JOIN `camp` `c` on `c`.`id` = `s`.`campaign_id`
 left join `strat` `s` on `s`.`userver_id` = `d`.`LineItemID`
where day BETWEEN '2014-06-01' AND '2014-06-30'
   and `demand_type` = 'exchange'
...
Рейтинг: 0 / 0
можно ли с оптимизировать этот запрос?
    #38686367
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexnewsalexnews,

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

Код: plsql
1.
select if(NULL = 'dedicated', 'dedicated', 'newsletter')

вообще-то операция сравнения с нуллом - IS NULL, никак не обычный знак равенства

По этому поводу хочу уточнить у ТСа: вы понимаете, что в запись результата с media_type=news попадут не только те сочетания записей (d,c), которым в s будет соответствовать всё, кроме "ded", но также и все сочетания записей (d,c), которым в s не будет соответствовать вообще ничего? Вам точно именно это надо?


miksofttanglir
Код: sql
1.
select if(NULL = 'ded', 'ded', 'news')


Или уже исправили, или этот баг связан с чем-то другим. Сейчас работает исправно.у меня по-прежнему глючит (опера и фф):
http://sqlfiddle.com/#!2/d41d8/40389
...
Рейтинг: 0 / 0
можно ли с оптимизировать этот запрос?
    #38687133
Фотография alexnews
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javajdbc,

Код: sql
1.
2.
3.
4.
5.
6.
7.
mysql> select count(TemplateID > 0)  from daily_stats;
+-----------------------+
| count(TemplateID > 0) |
+-----------------------+
|               9955416 |
+-----------------------+
1 row in set (0.02 sec)



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
mysql> select count(TemplateID > 0) 
    -> from daily_stats
    -> where day BETWEEN '2014-06-01' AND '2014-06-30';
+-----------------------+
| count(TemplateID > 0) |
+-----------------------+
|               9650805 |
+-----------------------+
1 row in set (2.91 sec)



Код: sql
1.
2.
3.
4.
5.
6.
7.
mysql> select count(TemplateID > 0)  from `daily_stats` `d`  left join `zf_strategies` `s` on `s`.`userver_id` = `d`.`LineItemID` where day BETWEEN '2014-06-01' AND '2014-06-30';
+-----------------------+
| count(TemplateID > 0) |
+-----------------------+
|               9650805 |
+-----------------------+
1 row in set (21.36 sec)



Код: sql
1.
2.
mysql> select count(TemplateID   > 0)  from `daily_stats` `d`       JOIN `zf_campaigns` `c` on `c`.`id` = `s`.`campaign_id`  left join `zf_strategies` `s` on `s`.`userver_id` = `d`.`LineItemID` where day BETWEEN '2014-06-01' AND '2014-06-30'    and `demand_type` = 'exchange';
ERROR 1054 (42S22): Unknown column 's.campaign_id' in 'on clause'
...
Рейтинг: 0 / 0
можно ли с оптимизировать этот запрос?
    #38687144
Фотография alexnews
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tangliralexnewsalexnews,

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

Код: plsql
1.
select if(NULL = 'dedicated', 'dedicated', 'newsletter')

вообще-то операция сравнения с нуллом - IS NULL, никак не обычный знак равенства



вроде бы в исходном коде нет сравнения с NULL?
вид такой

Код: plsql
1.
if(`s`.`media_type` = dedicated', 'dedicated', 'newsletter') `media_type`



tanglirПо этому поводу хочу уточнить у ТСа: вы понимаете, что в запись результата с media_type=news попадут не только те сочетания записей (d,c), которым в s будет соответствовать всё, кроме "ded", но также и все сочетания записей (d,c), которым в s не будет соответствовать вообще ничего? Вам точно именно это надо?


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

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

Кстати, а вы нам планы и прочее показываете с какой машины, с локальной (где не тормозит) или с сервера с реальными данными (где тормозит) ?

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

Кстати, а вы нам планы и прочее показываете с какой машины, с локальной (где не тормозит) или с сервера с реальными данными (где тормозит) ?

локальная, полная копия дампа базы за исключением что взяты данные за месяцТогда проверьте планы и результаты SHOW CREATE TABLE (которых мы так и не увидели) с сервером.

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

я же вроде бы дал планы вот тут http://www.describe.ru/sql.txt или перенести все на форум а потом просить удалить?
...
Рейтинг: 0 / 0
можно ли с оптимизировать этот запрос?
    #38687174
Фотография alexnews
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,
я могу вам написать письмо лично? мне очень важно решить эту проблему
...
Рейтинг: 0 / 0
можно ли с оптимизировать этот запрос?
    #38687219
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexnewsmiksoft,

я же вроде бы дал планы вот тут http://www.describe.ru/sql.txt или перенести все на форум а потом просить удалить?Вы файлик пополняете? я как-то не догадался второй раз туда посмотреть.
В принципе как хотите, только тогда уведомляйте об изменениях.
alexnewsmiksoft,
я могу вам написать письмо лично? мне очень важно решить эту проблемуТехнически можете, но особого смысла не вижу. Лучше решать задачу в рамках форума.
...
Рейтинг: 0 / 0
можно ли с оптимизировать этот запрос?
    #38687233
Фотография alexnews
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftalexnewsmiksoft,

я же вроде бы дал планы вот тут http://www.describe.ru/sql.txt или перенести все на форум а потом просить удалить?Вы файлик пополняете? я как-то не догадался второй раз туда посмотреть.
В принципе как хотите, только тогда уведомляйте об изменениях.

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

выделенное как раз и может оказаться нуллом в силу лефтджойна
...
Рейтинг: 0 / 0
можно ли с оптимизировать этот запрос?
    #38687243
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tangliralexnewsвроде бы в исходном коде нет сравнения с NULL?
вид такой
Код: plsql
1.
if(`s`.`media_type` = 'dedicated', 'dedicated', 'newsletter') `media_type`


выделенное как раз и может оказаться нуллом в силу лефтджойнаНе может. Я выше уже показывал, что лефтджойн в данном запросе вырождается в просто джойн.
И в самой таблице это поле NOT NULL.
...
Рейтинг: 0 / 0
можно ли с оптимизировать этот запрос?
    #38687250
Фотография alexnews
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksofttanglirпропущено...
выделенное как раз и может оказаться нуллом в силу лефтджойнаНе может. Я выше уже показывал, что лефтджойн в данном запросе вырождается в просто джойн.
И в самой таблице это поле NOT NULL.
Я пробовал просто джоин результат тот же
...
Рейтинг: 0 / 0
можно ли с оптимизировать этот запрос?
    #38687272
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftНе может. Я выше уже показывал, что лефтджойн в данном запросе вырождается в просто джойн.лефтджойн с c - да, вырождается, т.к. на c.demand_type есть фильтр
лефтджойн с s - с чего бы вдруг? фильтра на поля этой таблицы в запросе нет
...
Рейтинг: 0 / 0
можно ли с оптимизировать этот запрос?
    #38687281
Фотография alexnews
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirmiksoftНе может. Я выше уже показывал, что лефтджойн в данном запросе вырождается в просто джойн.лефтджойн с c - да, вырождается, т.к. на c.demand_type есть фильтр
лефтджойн с s - с чего бы вдруг? фильтра на поля этой таблицы в запросе нет
нда согласен, не подумал
...
Рейтинг: 0 / 0
можно ли с оптимизировать этот запрос?
    #38687284
Фотография alexnews
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
подскажите, пожалуйста что не правильно в этом запросе?
Код: plsql
1.
2.
mysql> select count(TemplateID   > 0)  from `daily_stats` `d`       JOIN `zf_campaigns` `c` on `c`.`id` = `s`.`campaign_id`  left join `zf_strategies` `s` on `s`.`userver_id` = `d`.`LineItemID` where day BETWEEN '2014-06-01' AND '2014-06-30'    and `demand_type` = 'exchange';
ERROR 1054 (42S22): Unknown column 's.campaign_id' in 'on clause'
...
Рейтинг: 0 / 0
можно ли с оптимизировать этот запрос?
    #38687286
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft> Не может <...>
tanglir> <...>с чего бы вдруг? <...>
alexnews> нда согласен, не подумал

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

а если джойн после лефтджойна поставить? а то у вас сначала идёт джойн с s, а только потом она "объявляется"
...
Рейтинг: 0 / 0
можно ли с оптимизировать этот запрос?
    #38687324
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirmiksoft> Не может <...>
tanglir> <...>с чего бы вдруг? <...>
alexnews> нда согласен, не подумал

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

а если джойн после лефтджойна поставить? а то у вас сначала идёт джойн с s, а только потом она "объявляется"

спасибо сам как-то ступил

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
mysql> select count(TemplateID   > 0)  from daily_stats     left join zf_strategies on zf_strategies.userver_id = daily_stats.LineItemID 
    ->  JOIN zf_campaigns on zf_campaigns.id = zf_strategies.campaign_id  where day BETWEEN '2014-06-01' AND '2014-06-30'    and zf_campaigns.demand_type = 'exchange';
+-------------------------+
| count(TemplateID   > 0) |
+-------------------------+
|                 9449925 |
+-------------------------+
1 row in set (3 min 15.49 sec)



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

ЯНП... вроде бы клоны - это фишка ПТ и Арии51? И кто из нас чей клон? :)
наверное я )
...
Рейтинг: 0 / 0
можно ли с оптимизировать этот запрос?
    #38687396
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexnewstangliralexnews,

а если джойн после лефтджойна поставить? а то у вас сначала идёт джойн с s, а только потом она "объявляется"

спасибо сам как-то ступил

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
mysql> select count(TemplateID   > 0)  from daily_stats     left join zf_strategies on zf_strategies.userver_id = daily_stats.LineItemID 
    ->  JOIN zf_campaigns on zf_campaigns.id = zf_strategies.campaign_id  where day BETWEEN '2014-06-01' AND '2014-06-30'    and zf_campaigns.demand_type = 'exchange';
+-------------------------+
| count(TemplateID   > 0) |
+-------------------------+
|                 9449925 |
+-------------------------+
1 row in set (3 min 15.49 sec)



это похоже и есть затык


пока не понятно , по какомоту из планов подсоединение
стратегий идет по индексу, по идее не должно ТАК
тормозить.

Идем дальше --

0. после каждого SELECT вставьте SQL_NO_CACHE
в тело запроса.

1. получите и выдайте ЕХПЛЕЙН на все 4 запроса.

2. поставьте любой "реального-времени" монитор
памяти и обрашений к диску.
Внимательно проследите, нет ли резкого увелкичения
обрашения к диску во время последнего запроса
при максимальном забитии памяти.
Один из вариантов тормозов -- запрос вывалился
из памяти на диск -- просто по размеру выборки.

Если память не забита но диск стучит -- есть шанс
ускорится увеличения каких-нибудь буферов.

3. А вообше -- какие требования? это
одиночный запрос или таких запросов по
5 каждую секунду?

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

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
mysql> select count(TemplateID > 0)  from daily_stats;
+-----------------------+
| count(TemplateID > 0) |
+-----------------------+
|              10391655 |
+-----------------------+
1 row in set (0.00 sec)

mysql> EXPLAIN select count(TemplateID > 0)  from daily_stats;
+----+-------------+-------+------+---------------+------+---------+------+------+------------------------------+
| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra                        |
+----+-------------+-------+------+---------------+------+---------+------+------+------------------------------+
|  1 | SIMPLE      | NULL  | NULL | NULL          | NULL | NULL    | NULL | NULL | Select tables optimized away |
+----+-------------+-------+------+---------------+------+---------+------+------+------------------------------+
1 row in set (0.00 sec)



Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
mysql> select count(TemplateID > 0)  from daily_stats where day BETWEEN '2014-06-01' AND '2014-06-30';
+-----------------------+
| count(TemplateID > 0) |
+-----------------------+
|               9316793 |
+-----------------------+
1 row in set (2.76 sec)

mysql> EXPLAIN select count(TemplateID > 0)  from daily_stats where day BETWEEN '2014-06-01' AND '2014-06-30';
+----+-------------+-------------+------+--------------------+------+---------+------+----------+-------------+
| id | select_type | table       | type | possible_keys      | key  | key_len | ref  | rows     | Extra       |
+----+-------------+-------------+------+--------------------+------+---------+------+----------+-------------+
|  1 | SIMPLE      | daily_stats | ALL  | un_daily_stats,Day | NULL | NULL    | NULL | 10391655 | Using where |
+----+-------------+-------------+------+--------------------+------+---------+------+----------+-------------+
1 row in set (0.00 sec)




Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
mysql> select count(TemplateID > 0)  from `daily_stats` `d`  left join `zf_strategies` `s` on `s`.`userver_id` = `d`.`LineItemID` where day BETWEEN '2014-06-01' AND '2014-06-30';
+-----------------------+
| count(TemplateID > 0) |
+-----------------------+
|               9316793 |
+-----------------------+
1 row in set (20.87 sec)

mysql> EXPLAIN select count(TemplateID > 0)  from `daily_stats` `d`  left join `zf_strategies` `s` on `s`.`userver_id` = `d`.`LineItemID` where day BETWEEN '2014-06-01' AND '2014-06-30';
+----+-------------+-------+------+---------------------------+---------------------------+---------+------------------+----------+-------------+
| id | select_type | table | type | possible_keys             | key                       | key_len | ref              | rows     | Extra       |
+----+-------------+-------+------+---------------------------+---------------------------+---------+------------------+----------+-------------+
|  1 | SIMPLE      | d     | ALL  | un_daily_stats,Day        | NULL                      | NULL    | NULL             | 10391655 | Using where |
|  1 | SIMPLE      | s     | ref  | idx_strategies_userver_id | idx_strategies_userver_id | 4       | lfx.d.LineItemID |        1 | Using index |
+----+-------------+-------+------+---------------------------+---------------------------+---------+------------------+----------+-------------+
2 rows in set (0.00 sec)






Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
mysql> select count(TemplateID   > 0)  from daily_stats     left join zf_strategies on zf_strategies.userver_id = daily_stats.LineItemID  JOIN zf_campaigns on zf_campaigns.id = zf_strategies.campaign_id  where day BETWEEN '2014-06-01' AND '2014-06-30'    and zf_campaigns.demand_type = 'exchange';
+-------------------------+
| count(TemplateID   > 0) |
+-------------------------+
|                 9122191 |
+-------------------------+
1 row in set (28.33 sec)

mysql> EXPLAIN select count(TemplateID   > 0)  from daily_stats     left join zf_strategies on zf_strategies.userver_id = daily_stats.LineItemID  JOIN zf_campaigns on zf_campaigns.id = zf_strategies.campaign_id  where day BETWEEN '2014-06-01' AND '2014-06-30'    and zf_campaigns.demand_type = 'exchange';
+----+-------------+---------------+--------+-----------------------------------------------------+------------+---------+-------------------------------+-------+-------------+
| id | select_type | table         | type   | possible_keys                                       | key        | key_len | ref                           | rows  | Extra       |
+----+-------------+---------------+--------+-----------------------------------------------------+------------+---------+-------------------------------+-------+-------------+
|  1 | SIMPLE      | zf_strategies | ALL    | idx_strategies_userver_id,fk_strategies_campaign_id | NULL       | NULL    | NULL                          | 21305 |             |
|  1 | SIMPLE      | zf_campaigns  | eq_ref | PRIMARY                                             | PRIMARY    | 96      | lfx.zf_strategies.campaign_id |     1 | Using where |
|  1 | SIMPLE      | daily_stats   | ref    | un_daily_stats,Day,LineItemID                       | LineItemID | 4       | lfx.zf_strategies.userver_id  |   116 | Using where |
+----+-------------+---------------+--------+-----------------------------------------------------+------------+---------+-------------------------------+-------+-------------+
3 rows in set (0.00 sec)



добавил NO_SQL_CACHE, время не изменилось. Извиняюсь за тупой вопрос а что SQL кэширует запросы? И есть вероятность когда данные изменились нарваться на закэшированные данные?





javajdbc
Идем дальше --

0. после каждого SELECT вставьте SQL_NO_CACHE
в тело запроса.


сделал но изменений по скорости не заметил или это для другого делалось?


javajdbc1. получите и выдайте ЕХПЛЕЙН на все 4 запроса.

выше вывел

javajdbc
2. поставьте любой "реального-времени" монитор
памяти и обрашений к диску.
Внимательно проследите, нет ли резкого увелкичения
обрашения к диску во время последнего запроса
при максимальном забитии памяти.
Один из вариантов тормозов -- запрос вывалился
из памяти на диск -- просто по размеру выборки.

Если память не забита но диск стучит -- есть шанс
ускорится увеличения каких-нибудь буферов.


можно мне подсказать что лучше всего использовать под CentOS 6.5?

javajdbc
3. А вообше -- какие требования? это
одиночный запрос или таких запросов по
5 каждую секунду?


одиночный но работал на сервере 9 часов, сейчас не знаю сколько будет так как изменения сделал недавно а скрипт запуститься через несколько часов да и то я не узнаю так как выходные а я новенький и не знаю даже откуда их скрипт отчета запускается


javajdbc4. Слышали ли вы слово "преагрегация" ?
до вас не слышал, но почитал вас в соседней ветке - крутая идея посоветую программерам сделать. Спасибо.
...
Рейтинг: 0 / 0
можно ли с оптимизировать этот запрос?
    #38688539
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OK, по запросам вроде бы все как было, кроме последнего --
скорость вроде улучшилась с 3 минут до 20 секунд.
Разко изменился ЕХПЛЕЙН --- теперь на первом месте zf_strategies
с 21К записей а даили_статс на последнем месте.

(люди добрые, скажите а бывает таблица которая первая и слева от лефт жоина
оказатся последней в Експлейне? или сервер у ТС чудит? или
копи-пасте плохо работает ? а был ли LEFT ?)


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
mysql> EXPLAIN select count(TemplateID   > 0)  from daily_stats     left join zf_strategies on zf_strategies.userver_id = daily_stats.LineItemID  JOIN zf_campaigns on zf_campaigns.id = zf_strategies.campaign_id  where day BETWEEN '2014-06-01' AND '2014-06-30'    and zf_campaigns.demand_type = 'exchange';
+----+-------------+---------------+--------+-----------------------------------------------------+------------+---------+-------------------------------+-------+-------------+
| id | select_type | table         | type   | possible_keys                                       | key        | key_len | ref                           | rows  | Extra       |
+----+-------------+---------------+--------+-----------------------------------------------------+------------+---------+-------------------------------+-------+-------------+
|  1 | SIMPLE      | zf_strategies | ALL    | idx_strategies_userver_id,fk_strategies_campaign_id | NULL       | NULL    | NULL                          | 21305 |             |
|  1 | SIMPLE      | zf_campaigns  | eq_ref | PRIMARY                                             | PRIMARY    | 96      | lfx.zf_strategies.campaign_id |     1 | Using where |
|  1 | SIMPLE      | daily_stats   | ref    | un_daily_stats,Day,LineItemID                       | LineItemID | 4       | lfx.zf_strategies.userver_id  |   116 | Using where |
+----+-------------+---------------+--------+-----------------------------------------------------+------------+---------+-------------------------------+-------+-------------+
3 rows in set (0.00 sec)



В любом случае это показывает что переспектива есть
лишние LEFT конкретно мешают. Одна из версий --
был перебот 20К записей на 100 записей -- 2 млн,
что меньше чем 9 МЛН прямого перебора и запрос
не вывалился из памяти.
...
Рейтинг: 0 / 0
можно ли с оптимизировать этот запрос?
    #38688540
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>> добавил NO_SQL_CACHE, время не изменилось.

Это обеспечивает валидность тестов против кеширования

>> Извиняюсь за тупой вопрос а что SQL кэширует запросы?

Да.

>> И есть вероятность когда данные изменились нарваться на закэшированные данные?

Нет.

>> ........ поставьте любой "реального-времени" монитор
>> можно мне подсказать что лучше всего использовать под CentOS 6.5?

> yum install htop
> htop
> yum install iotop
> iotop -o
> yum install sysstat
> iostat 3

ну или спросить местного сисадмина.

если охота в настройках покапатся, то:

> wget http://mysqltuner.com/mysqltuner.pl
> chmod +x mysqltuner.pl
> ./mysqltuner.pl

(осторожно, настройками можно поламать сервер!)
...
Рейтинг: 0 / 0
можно ли с оптимизировать этот запрос?
    #38688541
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>> [скрипт] ....одиночный но работал на сервере 9 часов, сейчас не знаю сколько будет так как изменения сделал недавно а скрипт запуститься через несколько часов да и то я не узнаю так как выходные а я новенький и не знаю даже откуда их скрипт отчета запускается

посмотрите , включен ли slow-query-log,
скорее всего ваш запрос туда попадет и вы сможете
полюбоватся какая была скорость даже через несколько дней.

>>>>4. Слышали ли вы слово "преагрегация" ?
>> до вас не слышал, но почитал вас в соседней ветке - крутая идея посоветую программерам сделать. Спасибо.

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


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