За последние 24 часа нас посетили 16772 программиста и 1694 робота. Сейчас ищут 799 программистов ...

Group BY, ограничение вывода LIMIT и подсчёт результатов

Тема в разделе "MySQL", создана пользователем SniperLabs, 29 апр 2015.

  1. SniperLabs

    SniperLabs Новичок

    С нами с:
    22 апр 2014
    Сообщения:
    2
    Симпатии:
    0
    Всем привет, столкнулся со следующей проблемой. Имеется таблица visits (фиксирует посещения пользователей).

    Задача: выводить посещаемость по дням с возможностью постраничного вывода.

    В отличии от простых запросов (без GROUP BY) подобных проблем нет. Но тут считать общее кол-во результатов (без LIMIT) mysql отказывается.

    На данный момент такой вывод реализован через аж целых 3 запроса:
    SELECT date, COUNT(*) as count FROM visits WHERE .... GROUP BY date ORDER BY date DESC LIMIT 0, 30 - это основной
    SELECT date, COUNT(*) as count FROM visits WHERE .... GROUP BY date - это для подсчёта
    SELECT FOUND_ROWS() as cnt - это сам подсчёт

    Скорее всего со временем - это дело начнет жутко тормозить при больших объёмах данных, хотелось бы посоветоваться, как сделать лучше и правильней. Заранее благодарю за ответы.
     
  2. runner

    runner Активный пользователь

    С нами с:
    16 апр 2010
    Сообщения:
    343
    Симпатии:
    1
    Адрес:
    Ташкент
    используй SQL_CALC_FOUND_ROWS в 1-м запросе

    При больших объемах данных просто сформируй вспомогательную таблицу для хранения данных по дням и получай из нее данные о количестве визитов
     
  3. retvizan

    retvizan Активный пользователь

    С нами с:
    27 дек 2013
    Сообщения:
    68
    Симпатии:
    22
    SELECT count(distinct `date`) FROM visits WHERE ...; - для подсчета.

    Один запрос далеко не всегда быстрее двух. И как раз использовать SQL_CALC_FOUND_ROWS не стоит. См тут.