Если ваши запросы в основном используют эту временную метку, вы можете протестировать этот дизайн (увеличив Первичный ключ с временной меткой в качестве первой части):
CREATE TABLE perf (
, ts INT NOT NULL
, oldPK
, ... other columns
, PRIMARY KEY(ts, oldPK)
, UNIQUE (oldPK)
) ENGINE=InnoDB ;
Это будет гарантировать, что запросы, подобные тому, который вы опубликовалибудет использовать кластерный (первичный) ключ.
Недостатком является то, что ваши вставки будут немного медленнее.Кроме того, если у вас есть другие индексы в таблице, они будут использовать немного больше места (поскольку они будут включать более широкий на 4 байта первичный ключ).
Самое большое преимущество такого кластеризованного индекса заключается в том, что запросыпри сканировании с большим диапазоном, например запросы, которые должны прочитать большие части таблицы или всей таблицы, найдут соответствующие строки последовательно и в требуемом порядке (BY timestamp
), что также будет полезно, если вы хотите группировать по дням илинеделя, месяц или год.
Старый PK все еще можно использовать для идентификации строк, сохраняя на нем ограничение UNIQUE
.
Возможно, вы захотите взглянуть на TokuDB , вариант MySQL (и с открытым исходным кодом), который позволяет несколько кластеризованных индексов .