У меня действительно большая таблица (более 10 миллионов строк), которая начинает демонстрировать признаки снижения производительности для запросов. Поскольку эта таблица, вероятно, удвоится или утроится по размеру относительно скоро, я собираюсь разбить таблицу на части, чтобы уменьшить производительность запросов.
Таблица выглядит примерно так:
CREATE TABLE [my_data] (
[id] [int] IDENTITY(1,1) NOT NULL,
[topic_id] [int] NULL,
[data_value] [decimal](19, 5) NULL
)
Итак, куча значений для любой данной темы. Запросы к этой таблице всегда будут по идентификатору темы, поэтому есть кластерный индекс (id, topic_id).
В любом случае, поскольку идентификаторы тем не ограничены (можно добавить любое количество тем), я хотел бы попробовать разбить эту таблицу на функцию модуля идентификаторов тем. Так что-то вроде:
topic_id % 4 == 0 => partition 0
topic_id % 4 == 1 => partition 1
topic_id % 4 == 2 => partition 2
topic_id % 4 == 3 => partition 3
Однако я не видел никакого способа сказать «создать функцию раздела» или «создать схему раздела» для выполнения этой операции при выборе раздела.
Это вообще возможно? Как мы можем сделать функцию разделения на основе операции, выполняемой над входным значением?