我正在尝试创建仅包含过去两周数据的索引视图。
这部分工作正常:
CREATE VIEW [dbo].[MainLogView]
WITH SCHEMABINDING
AS
SELECT Id, Date, System, [Function], StartTime, EndTime, Duration, ResponseIsSuccess, ResponseErrors
FROM dbo.MainLog
WHERE (Date >= DATEADD(day, - 14, GETDATE()))
但是当我尝试添加索引时:
CREATE UNIQUE CLUSTERED INDEX IDX_V1
ON MainLogView (Id);
我在说:
无法在视图'dbo.MainLogView'上创建索引。函数'getdate' 产生不确定的结果。使用确定性系统函数, 或修改用户定义的函数以返回确定性结果。
我知道为什么,但是如何减少过去两周视图中的数据? 我需要从我的表中获得小而快速的可用数据部分。
答案 0 :(得分:3)
你可以(我想,但我对索引视图没有真正的世界经验)创建一个记录表(一个实际的表,因为在索引视图中不允许该视图),你用当前日期填充 - 14天。这张表你可以保持最新;手动,触发器或其他一些聪明的机制。您可以使用该表进行连接,并实际用作过滤器。
当然,当您查询视图时,您必须首先更新'currentDate'表格!
你会得到类似的东西:
CREATE VIEW [dbo].[MainLogView]
WITH SCHEMABINDING
AS
SELECT Id, Date, System, [Function], StartTime, EndTime, Duration, ResponseIsSuccess, ResponseErrors
FROM dbo.MainLog ML
INNER JOIN dbo.CurrentDate CD
ON ML.Date >= CD.CurrentDateMin14Days
(完全未经测试,可能无效......这基本上是一个黑客,我完全不确定索引视图会给你带来任何性能提升。你可能会更好地使用常规视图。)