sql 分区函数中的非确定性函数

Posted

技术标签:

【中文标题】sql 分区函数中的非确定性函数【英文标题】:Nondeterministic functions in sql partitioning functions 【发布时间】:2008-10-10 23:20:47 【问题描述】:

在 SQL 分区函数中如何使用非确定性函数?它们是否有用?

【问题讨论】:

【参考方案1】:

MsSql 允许在分区函数中使用非确定性函数:

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

这是否意味着早于 10 天的记录会自动移至存档(第一个)分区?当然不是。

数据库存储分区架构设置的日期并以最(逻辑)方式使用它。 假设一个人在 2000 -01-11 上设置了上述模式,这使得定界日期为 2000-01-01。 当您查询日期低于初始定界日期 (boundary_value - 2000-01-01) 的数据时,您将仅使用存档分区。 当您查询日期高于当前日期减去 10 天 (GETDATE() – 10) 的数据时,您将仅使用当前分区。 所有其他查询将使用两个分区,即查询日期低于当前日期减去 10 天但高于定界日期 (2000-01-01) 的数据。

这意味着随着时间的推移,使用这两个分区的日期范围越来越大。而且您最好确定性地将分区设置为定界日期。

我不认为这是有用的任何场景。

【讨论】:

以上是关于sql 分区函数中的非确定性函数的主要内容,如果未能解决你的问题,请参考以下文章

sql聚合函数的应用

ROW_NUMBER SQL Server 2005的LIMIT功能实现(ROW_NUMBER()排序函数)

用户定义的函数 SQL Server 2005 被错误地标记为非确定性?

使用 SQL Server 转换为确定性函数

Sql Server 确定性用户定义函数

MySQL中的分区HASH分区