我有一个30 30的表,它有30-40列。我使用这个表创建报告,它会导致性能问题。我只使用这个表中的4-5列来生成报告。因此,我想为报告创建第二个表。但是,当原始表在不使用触发器的情况下更改时,必须更新第二个表。
无论我的查询是什么,在执行查询时,sql都会尝试缓存全部30 my的空间。当缓存完全加载时,sql开始使用磁盘。实际上我想避免这种情况。
我该怎么做呢?有没有办法使用ssis提前致谢?
发布于 2012-06-22 21:24:57
如果您使用的是SQL Server,则需要的是索引视图。使用所需的列创建视图,然后在其上放置索引。
索引视图将数据存储在视图中。它应该使视图与底层表保持最新,并且应该减少读取表的I/O。注意:这假设您的4-5列比整个表要窄得多。
发布于 2012-06-22 19:57:34
CREATE VIEW myView
AS
SELECT
column1,
column3,
column4 * column7
FROM
yourTable视图实际上只是一个存储的查询,就像宏一样。然后,您可以从该视图中进行选择,就好像它是一个普通表一样。
除非你使用具体化的视图,否则它不是一个真正的表,它只是一个查询。所以它不会加速任何东西,但它确实封装了代码,并帮助控制不同用户/登录可以读取的数据。
发布于 2012-06-22 21:02:22
Dems使用视图回答似乎很理想,但如果您真的在寻找一个新表,请创建它并使用触发器自动更新它。
可以为主表上的所有插入、更新和删除操作添加放置在主表上的触发器。当动作发生时,触发器会触发,并可用于执行其他功能...例如更新新辅助表。您将从插入和删除的表中提取(MSDN)
这里有许多关于触发器的优秀文章:Article 1、Article 2、Google Search
https://stackoverflow.com/questions/11155697
复制相似问题