Выборка mysql, юзеры и много таблиц

Poster

Новичок
Выборка mysql, юзеры и много таблиц

Есть таблица юзеров, есть 4 таблицы с трафиком юзеров - месячный, дневной, часовой и минутный.

для каждого юзера мне нужно считать суммарный трафик

таблица месячного:

savedate | client_name | in | out
2005-03-01 client1 336456187 106035692

с дневным - соттветственно 30 записей за месяц
часовой соответственно больше

делая в запросе по всем юзерам
LEFT JOIN месячный mth ON (auth.login = mth.client_name)
LEFT JOIN дневной dly ON (auth.login = dly.client_name)

получаю 12-15 секунд выполнения /это только 2 таблицы присоединено/

Индексы по client_name в каждой таблице.

Какая схема тут подойдет? как построить запрос менее затратно?

спасибо
 

Adelf

Administrator
Команда форума
1 Сделать таблицу клиентов. с ЧИСЛОВЫМ Полем id.

2. Во всех таблицах поменять client_name на ЧИСЛОВОЕ поле id_client.

3. Ну и таблицы бы я если честно слегка по-другому организовал. Надо тут определить что и как в них пишется и что и как часто считывается.

Обьем данных какой? Сколько записей в таблицах?
 

Poster

Новичок
п. 1 - конечно, uid UNIQUE

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

записей в таблицах достаточно много, в часовой таблице сейчас например 36тыс но это не все клиенты и не все записи.

считать суммы трафика в цикле при выводе юзеров еще более затратно, правильно?
 

Фанат

oncle terrible
Команда форума
правильно. именно поэтому и была изобретена база данных.
 

prolis

Новичок
Re: Выборка mysql, юзеры и много таблиц

Автор оригинала: Poster
для каждого юзера мне нужно считать суммарный трафик
В какой момент? Необходимо сразу по всем посчитать в реальном времени? За фиксированный период или произвольный?
 

Poster

Новичок
не сразу по всем, но в реальном времени.

foreach по выбранным юзерам - LIMIT 10

для каждого в показать потребленный траф с начала месяца (лезем в месячный + дневной + часовой + минутный, суммируем и выодим)

и + показать за произвольный временной интервал - форм_селекты от и до
но это равносильно "с начала месяца", даты другие и все.

я думаю самые тормозные моменты - это объединение таблиц по varchar полю/выше сказали уже/ + из таблиц выбирать SUM(total_in) за определенные даты для каждого клиента при посроении вывода.
 

prolis

Новичок
для периодов с начала месяца можно триггер на вставку в минутную таблицу повесить - пусть суммирует нарастающим итогом отдельную таблицу с начала месяца. В конце месяца данные обнулять.
 
Сверху