Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите расставить индексы, MySQL v5.5 
V
    Опции темы
tishaishii
Дата 25.6.2012, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: нет
Всего: 8



Запрос:
Код

    select
        sw1 . id_agent ,
        sw1 . id_connection ,
        ( select ca1.title from core.agent as ca1 where ( sw1 . id_agent = ca1 . id ) ) as `agent_title` ,
        ( select cc1.host from core.connection as cc1 where ( sw1 . id_connection = cc1 . id ) ) as `connection_host` ,
        count( distinct sw1 . application ) as `applications` ,
        count( distinct sw1 . client ) as `clients` ,
        min( sw1 . datetime ) as `datetime_start` ,
        max( sw1 . datetime ) as `datetime_finish` ,
        sum( sw1 . bytes    ) as `bytes_sent` ,
        cast( coalesce(
            sum( sw1 . bytes ) / (
                unix_timestamp( max( sw1 . datetime ) ) - unix_timestamp( min( sw1 . datetime ) )
            ) ,
            sum( sw1 . bytes )
        ) as unsigned ) as `avg_bytes_per_second` ,
        unix_timestamp( max( sw1 . datetime ) ) - unix_timestamp( min( sw1 . datetime ) ) as `seconds` ,
        count( * ) as `records`
    from
        stat.wowza_arch as sw1
    group by
        sw1 . id_agent ,
        sw1 . id_connection
    order by
        max( sw1 . datetime ) desc


PK( id_agent, id_connection, application, client, date , hour , minute)

Помогите расставить индексы.

Это сообщение отредактировал(а) tishaishii - 25.6.2012, 13:52
PM MAIL ICQ Skype   Вверх
Akina
Дата 25.6.2012, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Приведите запрос в нормальный вид, уберите подзапросы из секции select.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 25.6.2012, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Цитата(tishaishii @  25.6.2012,  14:50 Найти цитируемый пост)
Помогите расставить индексы.

core.agent(id)
core.connection(id)

фсо. Больше тут индексировать нечего smile


Цитата(Akina @  25.6.2012,  15:10 Найти цитируемый пост)
уберите подзапросы из секции select. 

Скаляр далеко не всегда хуже джойна. Если в результате группировки 100 тыщ записей схлопнется в 10, то скаляр после группировки будет лучше чем джойн до. Правда, тут, определенно, не тот стлучай.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akina
Дата 25.6.2012, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Zloxa, я вообще не понимаю, зачем внешние таблицы шить в запрос. Выкинуть их, сделать остаток подзапросом, и к нему уже шить словари.

Да запрос вообще весёлый... скажем, если после группировки по sw1.id_agent, sw1.id_connection в какой-то группе останется одна запись - сервер пошлёт лесом, не сумев поделить на ноль... 



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
tishaishii
Дата 25.6.2012, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: нет
Всего: 8



Не пошлёт. 1/0 eq NULL и там есть coalesce. По поводу "не тот случай". Случай именно тот: count( agent ) * count( connection ) ~= 100, а count(wowza_arch) >= 8e5 и всё время прибывает (в сутки на 1e5).
Ну подзапросы добавил в запрос вместе с group by, так как MySQL такое беозбразие позволяет. Можно вычеркнуть.

То есть, мнение такое, что дополнительные индексы здесь не сработают и запросу лучше не станет?

Это сообщение отредактировал(а) tishaishii - 25.6.2012, 16:02
PM MAIL ICQ Skype   Вверх
Zloxa
Дата 25.6.2012, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Цитата(tishaishii @  25.6.2012,  16:56 Найти цитируемый пост)
Случай именно тот

Не факт. Тут важно когда именно будет подтягиваться скаляр. Либо до аггрегации, либо после. Вероятнее всего, в этом случае, будет до аггрегации.

Цитата(tishaishii @  25.6.2012,  16:56 Найти цитируемый пост)
То есть, мнение такое, что дополнительные индексы здесь не сработают? 

Если запрос тупит с закоментированными селект подзапросами, оптимизировать его врядли удастся.

Цитата(tishaishii @  25.6.2012,  16:56 Найти цитируемый пост)
agg(1)/agg(0) eq NULL

Правда штоле? smile 


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
tishaishii
Дата 25.6.2012, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: нет
Всего: 8



Правда-правда. Так что никуда не пошлё.
Подзапросы я уже сказал, что можно вычеркнуть.
PM MAIL ICQ Skype   Вверх
Zloxa
Дата 25.6.2012, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Цитата(tishaishii @  25.6.2012,  17:15 Найти цитируемый пост)
Правда-правда.

Я бы вам рекомендовал все же тут поэксперементировать

Сколько будет
Код

  select coalesce(sum(val)/(max(val)-min(val)),100500) from (select 1 val) s

покажите вывод консоли


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akina
Дата 25.6.2012, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Zloxa, да, верно, это фича MySQL, документированная даже.
Цитата

Division by zero produces a NULL result



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 25.6.2012, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Круто!  smile 


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
tishaishii
Дата 25.6.2012, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: нет
Всего: 8



Цитата(Zloxa @ 25.6.2012,  16:20)
Цитата(tishaishii @  25.6.2012,  17:15 Найти цитируемый пост)
Правда-правда.

Я бы вам рекомендовал все же тут поэксперементировать

Сколько будет
Код

  select coalesce(sum(val)/(max(val)-min(val)),100500) from (select 1 val) s

покажите вывод консоли

Над чем эксперементировать-то? Есть надежда задействовать ещё индексы?

Вобщем, я лучше буду придумывать всякие обходные пути с объектами СУБД.
Группировать данные на лету, например, в триггере каком-нибудь.
Спасибо!
PM MAIL ICQ Skype   Вверх
Zloxa
Дата 25.6.2012, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Цитата(tishaishii @  25.6.2012,  19:02 Найти цитируемый пост)
Над чем эксперементировать-то? 

Уже не надо. Акина все объяснил с рефом на доку.

Цитата(tishaishii @  25.6.2012,  19:02 Найти цитируемый пост)
Есть надежда задействовать ещё индексы?

Нет, нету.

Цитата(tishaishii @  25.6.2012,  19:02 Найти цитируемый пост)
Группировать данные на лету, например, в триггере каком-нибудь.

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


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
tishaishii
Дата 25.6.2012, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: нет
Всего: 8



Объяснил, что 1/0 eq NULL?
Причём здесь остатки счетов?
Троллинг, по-ходу.
PM MAIL ICQ Skype   Вверх
Zloxa
Дата 25.6.2012, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Цитата(tishaishii @  25.6.2012,  22:05 Найти цитируемый пост)
Объяснил, что 1/0 eq NULL?

Да. Это не общепринятая норма, на сколько я могу судить. MySQL скорее исключение. Это вело меня в заблуждение.

Цитата(tishaishii @  25.6.2012,  22:05 Найти цитируемый пост)
Причём здесь остатки счетов?

При том что это тоже, фактически, результат аггрегации. С теоретической точки зрения выделение отдельной сущности остатков или плана счетов избыточно в виду того, что это расчетная информация, находится в прямой зависимости от других сущностей, как документов. Однако с практической точки зрения, для ее расчета требуется не адекватно много ресурса, потому базу денормализуют, выделяют суррогатную сущность, получают проблемы с обеспечением согласованности данных.

Так и у вас. Если вам нужно иметь возможность быстро выбираться по аггрегированным данным, вам надо денормализовываться, преаггрегироваться, решать проблемы согласованности, просаживаться на модификации.

Цитата(tishaishii @  25.6.2012,  22:05 Найти цитируемый пост)
Троллинг, по-ходу. 

Цель любого троллинга - повышение эмоциональной вовлеченности собеседников, привлечение новых, так же  за счет эмоционального вовлеченния. Где вы тут узрели симптомы троллинга?


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
tishaishii
Дата 26.6.2012, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: нет
Всего: 8



Ну вот я вовлёкся. Уже тема закрыта. А я увлечённо читаю и отвечаю.
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0627 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.