我的数据库中有一个视图,它返回许多表的最后更新值。这是为了防止应用程序直接查询这些表以进行更改,应用程序处于多用户环境中,并且这些表可能会在短时间内频繁更新,然后一次忽略几个小时。
我有一个视图叫做vwLastUpated
CREATE VIEW vwLastUpdated as
SELECT Tasks, Items, ListItems FROM
(Select Max(ModifiedTime) as Tasks from tblTasks) a CROSS JOIN
(Select Max(ModifiedTime) as Items from tblItems) b CROSS JOIN
(Select Max(ModifiedTime) as ListItems from tblListItem) c
客户端被配置为每 10-30 秒调用一次此视图(用户可配置),问题是,当有很多客户端(一个站点大约 80 个)时,视图会非常非常频繁地被点击,有时可能需要运行几毫秒,但如果正在发生更新,有时需要 200-300 毫秒才能运行,这似乎在大量使用期间减慢了前端。这些表在ModifiedTime DESC
.
这些站点在某些情况下使用 SQL Express,而在其他站点,他们拥有完整版本的 SQL,我可以以不同的方式设计视图并使用 Agent 更新公共表 ( tblLastUpdated
),其中 Agent 通过基本上运行上述查询来直接更新表5秒。
我可以做些什么来提高流程效率并减少使用 SQL Express 的数据库服务器上的负载?
客户端站点至少在 SQL Server 2008 上(最高到 SQL 2012)