PARTITION BY HASH
бесполезен; не пытайтесь понять, как заставить это работать.
Более того, как правило, разбиение на разделы бесполезно, если у вас не менее миллиона строк. Поскольку вы просите, чтобы DATE
было UNIQUE
, я подозреваю, что у вас будет не более нескольких тысяч строк.
Если вы хотите объяснить назначение таблицы, ее возможный размер, цель использования Ha sh и некоторые SELECTs
, которые вы будете использовать, я, вероятно, могу объяснить, как достичь ваших целей без разделения.
Scenar ios:
Для этих запросов:
... WHERE id = 111 AND created_at BETWEEN ... AND ... -- case 1
... WHERE attribute_id = 222 -- case 2
... WHERE attribute_id = 333 AND created_at BETWEEN ... AND ... -- case 3
Тогда ваша таблица может быть без разделов:
CREATE TABLE `float_values` (
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT, -- debatable
`attribute_id` bigint UNSIGNED NOT NULL,
`value` double(8,2) NOT NULL,
`created_at` date NOT NULL,
`updated_at` date NOT NULL
PRIMARY KEY(id), -- for case 1
INDEX(attribute_id, created_at) -- for cases 2, 3
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;