关于添加索引视图后的数据存储区别
2011-02-28 11:44
393 查看
为基表添加索引视图后,在INSERT新的数据时,索引视图是如何添加数据的?是通过扫描基表来更新视图?还是根据视图定义直接计算后加入索引视图?下面是分析案例。
现有基表news,数据行5280,数据页240 。在未创建索引视图的情况与添加数据:
下面为基表添加索引视图:
/*表 'v_test_news'。扫描计数 0,逻辑读取 6 次,
表 'Worktable'。扫描计数 2,逻辑读取 7 次,
表 'news'。扫描计数 0,逻辑读取 2 次,*/
执行计划如图:
结论:首先通过IO的次数来看,在添加索引视图后再向基表添加数据时,并没有去扫描基表(因为基表有240页,如果扫描基表至少要240次IO)。其次从执行计划来看,添加索引视图后,明显多了一个分支,这个分支就是根据视图定义来生成数据,然后物理存储。
现有基表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)。其次从执行计划来看,添加索引视图后,明显多了一个分支,这个分支就是根据视图定义来生成数据,然后物理存储。
相关文章推荐
- 数据库基础知识点二:PLSQL、游标、程序包、存储过程、触发器,序列,视图,索引,数据字典
- innodb表的聚集索引和普通索引的区别(从数据存储角度),组合索引和单列索引的区别.
- Iphone开发(十一)从plist文件读取列表数据并添加索引
- 存储过程与视图区别
- SQLite数据存储批量添加
- 关于AngularJs数据的本地存储详解
- IOS开发中关于数据的本地化存储
- 关于Cocos2d-x中数据的存储提取和类型转换
- 【gtk#】关于treeview数据绑定,选择及添加删除节点数据的备忘录
- 关于sql的小玩意 sql server添加数据
- 索引、视图、游标、存储过程和触发器的理解
- 使用Spring的Property文件存储测试数据 - 添加测试数据
- 关于如何实现在整合struts2和hibernate4框架下对many-to-one级联数据的存储
- RAC环境下误操作将数据文件添加到本地存储
- B/S开发中关于数据添加标识符的问题
- 关于Web项目里的给表单验证控件添加结束时间不得小于开始时间的验证方法,日期转换和前台显示格式之间,还有JSON取日期数据格式转换成标准日期格式的问题
- iOS笔记 -- 模拟器与真机在数据存储上的细节区别
- 关于HTML5数据存储
- union all 关于order by ,添加序号,获取某个数据在序列中的位置
- 测试使用-批量往es索引中添加数据,es的使用小结。