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 分区函数中的非确定性函数的主要内容,如果未能解决你的问题,请参考以下文章
ROW_NUMBER SQL Server 2005的LIMIT功能实现(ROW_NUMBER()排序函数)