Недетерминированные функции в функциях разбиения SQL - PullRequest
0 голосов
/ 11 октября 2008

Как недетерминированные функции используются в функциях секционирования SQL и насколько они полезны?

1 Ответ

3 голосов
/ 11 октября 2008

MsSql допускает недетерминированные функции в функциях разделения:

CREATE PARTITION FUNCTION MyArchive(datetime)
AS RANGE LEFT FOR VALUES (GETDATE() – 10)
GO

Означает ли это, что записи старше 10 дней автоматически перемещаются в архивный (первый) раздел? Конечно нет.

База данных хранит дату, когда была создана схема разделения, и использует ее наиболее (логичным) способом. Допустим, каждый устанавливает вышеупомянутую схему на 2000 -01-11, которая устанавливает дату разделения 2000-01-01. Когда вы запрашиваете данные с датой ниже начальной даты разграничения (border_value - 2000-01-01), вы будете использовать только раздел архива. Когда вы запрашиваете данные с датой выше, чем текущий день минус 10 дней (GETDATE () - 10), вы будете использовать только текущий раздел. Во всех других запросах будут использоваться оба раздела, то есть для запроса данных с датой ниже текущей даты минус 10 дней, но выше даты разделения (2000-01-01).

Это означает, что с каждым днем ​​диапазон дат, для которых используются оба раздела, увеличивается. И вам лучше было бы установить разделение на дату разграничения детерминистически.

Я не вижу ни одного сценария, в котором это полезно.

...