文档详情

循序渐进db2笔记-索引解析.doc

发布:2017-01-08约9.91千字共10页下载文档
文本预览下载声明
索引类型 唯一索引 它确保表中没有两个数据行具有完全相同的键值来帮助维护数据完整性。 尝试为已经包含数据的表创建唯一索引时,将检查组成该索引的列中的值是否唯一,如果包含具有重复键值的行,索引创建将失败。 为表定义了唯一索引之后,每当在索引中添加或更改键时就会强制唯一性(包括插入、更新、装入、导入和设置完整性以命名一部分)。 引: 唯一索引用来保证数据的唯一性,唯一索引一般性能要高于非唯一索引,只允许列表中出现一个键值,允许显示单个NULL。 例句: CREATE UNIQUE INDEX IDX_NAME ON TAB_NAME 非唯一性索引 维护频繁使用的数据值的排序顺序,这仅仅用于提高查询性能,不用于对关联的表强制执行约束。 引: 数据库管理器使用唯一索引和NOT NULL约束的组合来实现主键约束和唯一键约束。 可以说大部分的索引是非唯一索引,这和数据的分布有关系,一般的数据都具有可重复性特性,所以他们不能被定义为唯一索引。 非唯一索引可以使用命令: CREATE INDEX IDX_NAME ON TAB_NAME (COLNAME) 集群索引 数据页中行的顺序对应于索引中行的顺序。这就使得给定表中只能存在一个集群索引。在某些关系数据库管理系统中,集群索引的叶子节点对应于实际数据,而不是对应于指定位于其他地方的数据的指针。 集群索引作用: 如果对表进行了重组,那么会按照索引键的顺序将行插入数据页中。集群索引改善了以键的顺序扫描整张表的性能。 引: 群集索引允许对数据页采用更线性的访问模式,允许更有效的预取,并且避免排序。群集索引是要求数据在插入时,做更多的操作,将相临的数据条目放入相同的页,使得查询速度更快,因为每次访问索引页要将所有的索引条目都访问完毕才移到下一页,保证了缓存池中任何一个时刻都只有一个索引页存在。 群集索引的特点: 提高查询速度,数据页以键的顺序排列; 以键的顺序扫描整张表; 插入和更新需要做更多的事情,不建议经常插入和更新的表上做群集索引 非集群索引 两者都只包含索引结构中的键和记录标识。记录标识始终指向数据页中的行。 集群与非集群的区别 数据库管理器尝试按照相应的键在索引页中出现的顺序来将数据保存在数据页中,将尝试把具有相似键的行插入同一页中。 双向索引 双向索引允许按正反两个方向进行扫描。 CREATE INDEX语句的ALLOW REVERSE SCANS子句同时启用正反向索引扫描,反之DISALLOW REVERSE SCANS。 双向索引优点: 1.便于使用MIN和MAX函数 2.访存先前的键 3.不需要数据库管理器创建临时表来进行反向扫描 4.消除冗余反向顺序索引 MDC块索引 当我们创建MDC时,数据库会自动生成块(block)索引,MDC索引相关的块索引是排列到一起的,可以显著的提高性能。 DB2数据库管理器使用B+树结构进行索引存储。 索引的缺点 1. 创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。 2. 索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间。 3. 当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。 索引访问机制 1.大多数情况下,DB2优化器喜欢使用索引。 2.如果没有WHERE子句,全扫描是最佳的。 3.对于非常小的表甚至较大的表,使用索引有可能不会优化性能,读取索引页再读取数据页,组织索引需要额外的I/O以实现查询。 4.表扫描也有其优点。DB2会限定要扫描的页面;还可以调用顺序预取以在请求某些页面之前就读取这些页面。 索引扫描方式 匹配索引扫描 Matching Index Scan 索引:INDEX(CITY,CNTRY ,ADD_DATE) 查询:SELECT???ADD_DATE?? FROM CUSTOMER WHERE? CITY?=?’BEIJING’ ?AND??CNTRY?=?‘CHINA; 由于此查询在新建索引的第一列上存在谓词条件,DB2 能够根据这个谓词条件从索引树的根节点开始遍历,经过中间节点最后定位到某一个叶子节点,然后从此叶子节点开始往后进行在叶子节点上的索引扫描,直到找到所有满足条件的记录。 非匹配索引扫描 Non-matching Index Scan 索引:INDEX(CITY,CNTRY ,ADD_DATE) 查询:SELECT???ADD_DATE?? FROM CUSTOMER WHERE? CITY?=?’BEIJING’ ?AND??CNTRY?=?‘CHI
显示全部
相似文档