@kirill-93

Стоит ли делать такую оптимизацию?

БД MySQL, имеется таблица statistics, куда собирается статистика.
Таблица состоит из 15 полей, имеет индекс по двум полям.
Когда пользователь заходит на сайт или совершает на сайте какое-нибудь действие, идет запись в эту таблицу.
В день в таблицу в среднем пишется 30-80 тысяч записей.

Подскажите, пожалуйста, правильно ли я понимаю следующее:
1. При каждой записи в таблицу индексы таблицы пересчитываются
2. Если так, то чем больше будет эта таблица, тем дольше будет пересчитываться индекс
Если вышеописанные утверждения верны, то подойдет ли следующая схема: Создаю таблицу tmp_statistics, которая полностью идентична таблице statistics, но не имеет индексов. Пишу статистику только в нее, а раз в какое-то время (например раз в 30 минут по крону) запускается скрипт, который берет данные из таблицы tmp_statistics и вставляет их в таблицу statistics разом большой пачкой, а таблицу tmp_statistics очищает.
Например, если за 30 минут в tmp_statistics собралось 10000 записей, то индекс пересчитается один раз, а не 10000 раз.
Имеет ли смысл такая оптимизация?

PS. Я знаю, что для статистики MySQL не очень подходит. Мы планируем переходить на другие хранилища, но пока нужно оптимизировать MySQL
  • Вопрос задан
  • 234 просмотра
Пригласить эксперта
Ответы на вопрос 1
Gomonov
@Gomonov
1. Да
2. При 80к вставок - это одна вставка в секунду - я бы не заморачивался с временным хранилищем, даже при большом объёме уже имеющихся данных. Если составной индекс не включает текстовое поле - точно не заморачивался, тем более, если вы планируете переходить на другие хранилища) Ну и вообще, если вы решили оптимизировать, у вас реально проседает вставка? Сколько по времени идёт?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы