У меня есть табличные products
которые имеют более 50 миллионов записей. Я хочу отслеживать, кто загрузил данный продукт в моей системе, но просто добавление uploaded_by_id
к такой огромной таблице - это не те решения, которые я ищу. Что еще, чем таблица соединений, которую я могу создать, чтобы иметь возможность запрашивать продукты, загруженные данным идентификатором в заданном диапазоне времени? Product.where(uploaded_by_id: @user.id, created_at: time_range)
- это то, что мне нужно сделать, но мне нужен более эффективный способ.
Вместо того, чтобы касаться основной таблицы, добавьте еще одну таблицу (Вертикальное разделение). Новая таблица будет иметь один и тот же PRIMARY KEY
, но не AUTO_INCREMENT
. Новый столбец (столбцы) войдет в эту таблицу.
Создавайте строки в новой таблице только тогда, когда новый столбец (столбцы) имеет значение.
Когда вам не нужны новые столбцы, продолжайте читать только из старой таблицы.
Когда вам также понадобится новый столбец, используйте LEFT JOIN
.
Возможно, вы захотите изучить такие инструменты, как
Оба инструмента позволяют изменять таблицы без их блокировки.