您的位置:首页 > 其它

关于添加索引视图后的数据存储区别

2011-02-28 11:44 393 查看
  为基表添加索引视图后,在INSERT新的数据时,索引视图是如何添加数据的?是通过扫描基表来更新视图?还是根据视图定义直接计算后加入索引视图?下面是分析案例。

  现有基表news,数据行5280,数据页240 。在未创建索引视图的情况与添加数据:
INSERT news (title,ShortTitle,NewsMemo,NewsTypeId,IsDelete,IsVerify,IsUserPost)
VALUES('hello test title','hello ShortTitle','hello memo', 35, 0, 1, 0)
结果是“逻辑读取 2 次”,执行计划如图:



下面为基表添加索引视图:
CREATE VIEW v_test_news
WITH SCHEMABINDING
AS
SELECT NewsTypeId,COUNT_BIG(*) as NewsCount FROM dbo.news GROUP BY NewsTypeId;

GO

CREATE UNIQUE clustered INDEX idx_v_main ON v_test_news(NewsTypeId);
GO
然后再向基表添加数据,结果是:

/*表 'v_test_news'。扫描计数 0,逻辑读取 6 次,
表 'Worktable'。扫描计数 2,逻辑读取 7 次,
表 'news'。扫描计数 0,逻辑读取 2 次,*/

执行计划如图:



结论:首先通过IO的次数来看,在添加索引视图后再向基表添加数据时,并没有去扫描基表(因为基表有240页,如果扫描基表至少要240次IO)。其次从执行计划来看,添加索引视图后,明显多了一个分支,这个分支就是根据视图定义来生成数据,然后物理存储。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: