@Frapsy

Возможно ли уменьшить время выполнения запроса?

Есть таблица со статистическими данными. Сейчас в ней 6.5 млн записей, каждый день количество увеличивается примерно на 300.000 записей. Необходимо регулярно выполнять запрос такого вида
SELECT MAX(players) as max,AVG(players) as avg_players,AVG(ping) as avg_ping FROM y_update_sa WHERE server_id = :id

Уже сейчас время выполнения такого запроса 8-9 секунд. Тип таблиц MyISAM. Возможно ли уменьшить время выполнения?
  • Вопрос задан
  • 573 просмотра
Решения вопроса 1
SagePtr
@SagePtr
Еда - это святое
Как вариант - хранить статистику отдельно и пересчитывать при каждом добавлении записи. В статистике хранить по конкретному server_id макс.значение players, сумма всех players, сумма всех ping, кол-во элементов. При вставке в таблицу (на триггере, например) обновлять значения в таблице статистики. А сама выборка из статистики займёт 1 чтение и 2 деления, вместо практически фулскана всей таблицы.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
RicoX
@RicoX
Ушел на http://ru.stackoverflow.com/
Перегнать в XtraDB выставить per table, увеличить кеш, должно выполняться повеселее, но это общие советы, надо тестировать и смотреть переменные окружения и настройки сервера.
Ответ написан
Комментировать
aaadddminnn
@aaadddminnn
php it ubuntu debian
mysqli + кеш и правило настроенные индексы
Ответ написан
Комментировать
@Yago
Какая схема таблицы? Стоят ли индексы на полях players и ping?
Ответ написан
GM2mars
@GM2mars
Как сказал SagePtr , выносите статистику отдельно, инкремируйте/декремируйте значения при изменении основных таблиц. Все правильно, сначала делайте нормализацию БД, потом при оптимизации делайте денормализацию.
Вот ещё можете почитать про оптимизацию БД ruhighload.com/server раздел "Базы данных"
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы