Sql server 包含过去两周数据的索引视图
我正在尝试创建只包含过去两周数据的索引视图 这部分很好:Sql server 包含过去两周数据的索引视图,sql-server,tsql,indexed-view,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 >= DATEAD
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”
产生不确定的结果。使用确定性系统函数,
或者修改用户定义的函数以返回确定性结果
我知道原因,但如何减少过去两周的数据?
我需要从我的表中快速查询一小部分数据 您可以(我想,但我没有索引视图的实际经验)创建一个单记录表(一个实际的表,因为索引视图中不允许有视图),并用当前日期(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
(完全未经测试,可能不起作用……这基本上是一种黑客行为,我根本不确定索引视图是否能提高性能。使用常规视图可能会更好。)你不能。索引视图的维护是通过对基表的触发器有效地执行的,并且完全基于受这些基表上的单个操作(因此它们的所有限制)影响的行。过去两周需要一些替代的维护机制,这在SQL Server中是不存在的。为什么要在上创建索引ID@TheGameiswar因为我想测试一下。第一柱。在这种情况下,它可以忽略不计。因为它不起作用。如果mainlog是一个表,为什么不在dateadd函数上创建一个索引,并在视图中使用select?@TheGameiswar我需要类似于oracle中materializedview的东西。我希望从视图中获取数据而不影响MainLog。并每天刷新视图中的数据一次。聪明,我将测试它。工作,创建索引;-)我必须对它进行更复杂的测试。@BWA Cool,别忘了检查性能。你最好用一种不太老套的方法。