по месяцам (календарным) на ближайшие 20 лет. Есть вариант проще и / или производительнее такого?
ALTER TABLE statistics
PARTITION BY HASH( ((YEAR(date_field) - 2020) * 12 + MONTH(date_field)) % 256 )
PARTITIONS 256
Ты думаешь, партицирование == производительность , автоматом ? Ну-ну.
вопрос именно к производительности хеширующей функции
Вряд ли это тут важно.
ок, я пока писал - тоже решил что экономлю на спичках, просто монструозно получилось
Ты в курсе, что ты это выражение должен будешь повторять точь-в-точь в каждом WHERE ? Ну, наварное...
м? я этим запросом напилю таблицу на партиции, а мускуль потом сам при where будет выполнять хеширующую функцию к условию. Условно, select * from statistics where date_field between '20210101' and '20210228' заюзает только 2 партиции
ну в схеме с ALTER TABLE statistics PARTITION BY HASH( to_days(make_at) % 30 ) PARTITIONS 30; именно так и работает, так что да, с определенной степенью уверенности - уверен
соврал, там используется для работы по диапазону вычисление номера партишенов в диапазоне, давно писал... Да, HASH не работает по диапазонам
Обсуждают сегодня