Если все пользователи должны быть зарегистрированы, я бы пошел с полным нормализованным решением.
USERS TABLE OBJECTS TABLE
--------------- -----------------
user_id (primary) object_id (primary)
USERS_TO_OBJECTS TABLE
--------------------
user_id (index)
object_id (index)
time (index)
action (index)
? object_type (index) // could be useful to speed things up
Эта настройка, вероятно, даст вам лучшую гибкость при составлении графиков, а также будет довольно быстрой, так как вы можете опуститьпользователь или объект, если они вам не нужны.
Редактировать:
Скажите, что город X (идентификатор 9876) был обновлен пользователем 123 (идентификатор 1234) ...
1234 - user_id (the user that did the action)
9876 - object_id (the object where the action was done)
xyz - time
updated - action type (so that you select only specific actions)
city - object type (so that you select only specific objects)
Я заполнил эту таблицу 40-миллионными строками, и результаты вполне приемлемы.
0,002 секунды для простого СЧЕТА по количеству ОБНОВЛЕННЫХ городов за последнюю НЕДЕЛЮ.Данные были вставлены случайным образом.
Редактировать 2
Если вы обнаружите, что таблица действительно огромная, вы можете прибегнуть к разделам MySQL, и ваша схема будет идеальной.Я действительно не знаю, как вы собираетесь использовать таблицы, но вы могли бы:
РАЗДЕЛЕНИЕ ПО ДИАПАЗОНУ.Организовать раздел по датам.Каждый новый месяц или около того у вас будет новый раздел.
РАЗДЕЛЕНИЕ ПО КЛЮЧУ.Организовать раздел по действиям.Каждое действие переходит к соответствующему разделу.
Вы можете проверить подробнее о разделах на сайте MySQL и . В этой статье вы узнаете о тонко настраиваемых разделах.