SELECT EXTRACT(YEAR_MONTH FROM`time`), sum(sum)FROM`table`WHERE user_id=? AND time BETWEEN начало_всего_периода AND конец_всего_периода AND(STATUS=50 ORSTATUS=10)GROUPBY1
Вот и получили весь график. При необходимости, заполните отсутствующие месяцы на стороне приложение.
Постройте индекс user_id & status & time (это один индекс, а не три) и user_id & time, посмотрите по explain'у, какой из них используется. Неиспользуемый удалить.
Спасибо большое.
Буду теперь читать про индексы в MySQL, как из верно использовать и про доп функции.
Для того чтоб оптимизировать код. Загрузка страницы сократилась с 0,8 до 0,2
explain выдает теперь всего 3000 значений
Только у меня даты в UNIX time, пришлось немного по другому переписать
Частость захода на страницу зависит от юзера, если онлайн на сайте 50-100 человек то думаю в статистику могут заходить как минимум раз в секунду.
Значение user_id, зависит от самого юзера который зашел на страницу
В итоге нужно получить построение графика для статистики покупок
В день примерно +5 000-8 000 данных добавляется в таблицу (но не все валидные по status для нашей задачи)
SELECT user_id, sum(sum)FROM`reports`WHERE user_id=4 AND time >=1358895600 AND time <1361574000 AND(STATUS=50 ORSTATUS=10)GROUPBY service_id
Он грузит бд на 0,6сек... это очень много для 12 штук на 1 странице
explain выдает 84 000 rows
Я прописал индексы к user_id, time, status запос стал быстрее 0,3 сек и 42 000rows но все равно очень медленно для 12 запросов и нагрузка большая (Добавление)
Так-же мне нужно вывести почасовую статистику за сегодня.
Так-же 24 запроса что ли делать =(
Ну хотя можно 1 запрос на вывод всех данных и уже с помощью PHP сгруппировать по часам (думаю так быстрее будет)
Как думайте?
Прошу помощи. Как лучше реализовать статистику в виде графика на сайте.
И именно:
Имеется таблица которая насчитывает более 100млн значений.
В ней содержаться операции
К примеру user_id пополнил на 50руб и так далее
Нужно вывести график(сделать сложный запрос) по месяцам и юзерам
На графике ось X 12 месяцевб ось Y суммы, а сам график привязан к пользователю
БД выглядит примерно так:
id, user_id, sum, time
Вот в голове пока сделать 12 запросов, сгруппировать все по юзеру и вывести сумму.
Примерно так: