索引视图,包含过去两周的数据

时间:2016-05-17 13:03:47

标签: sql-server tsql indexed-view

我正在尝试创建仅包含过去两周数据的索引视图。

这部分工作正常:

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'   产生不确定的结果。使用确定性系统函数,   或修改用户定义的函数以返回确定性结果。

我知道为什么,但是如何减少过去两周视图中的数据? 我需要从我的表中获得小而快速的可用数据部分。

1 个答案:

答案 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

(完全未经测试,可能无效......这基本上是一个黑客,我完全不确定索引视图会给你带来任何性能提升。你可能会更好地使用常规视图。)