Oracle数据库中利用索引表提高查询速度-性能调优

  在索引表的ROWID中存储的病不是记录的实际物理地址,而是逻辑的物理地址。故有些数据库管理员把索引表中的ROWID列称为ROWID伪主键列,他存放的是表的主键信息。
 
    一、索引表与标准表的差异
 
    索引表与标准表的差异主要体现在四个方面。
 
    一是索引表中的ROWID列存放的时主键信息,使逻辑的物理地址。而在标准表的ROWID伪列中则存储的是真实的物理地址。这是两者之间最本质的区别。另外其他三个方面的差异都是因为有这个差异存在而存在。也可以说,他是索引表优势的根源。
 
    二是索引表对记录的访问是基于主键的,也就是说,根据逻辑的ROWID.而标准表在访问记录的时候,则是通过物理的ROWID地址。
 
    三是表的扫描方式不同。若采用索引表的话,则数据库是通过全索引扫描方式反问相关的记录;而若采用标准表的话,则是通过顺序扫描的方式返回相关的记录。这两者访问方式在性能上有很大的差异。全索引扫描方式,可能提供更高的查询性能。
 
    四是对于主键的要求不同。在建立标准表的时候,不一定要指定主键。但是,若用户在建立索引表的时候,则必须给表建立主键,使用主键来唯一表示一行记录。很简单,在索引表中,ROWID伪列中就存储着主键信息。若不指定具体的主键的话,数据访问时就不能够对记录进行定位。
 
    不过,索引表与标准表的差异只是停留在数据库开发的层面,或者说,只是内部存储结构上有一定的差异。但是,在用户使用它们的时候,没有任何的差异。在前台应用程序设计的时候,用户可以向普通表那样访问索引表。这就给索引表的应用排除了使用上的障碍。
 
    二、索引表的优势
 
    索引表的优势主要体现在数据查询上。而且,这个优势是非常明显的。
 
    一是索引表能够获得比标准表更快的查询速度,即使这张标准表已经建立了合适的索引。这跟索引表的存储结构是分不开的。因为索引表的数据在存储的时候,所有的行记录都是跟排序过的主键列一起存储在数据库系统中。故在查询的时候,只需要找到主键,就俄可以记录查询到整条记录的信息。而标准表在数据查询的时候,需要先找到对应的ROWID列,然后再去查询主键信息,再去查询对应的记录。所以,索引表减少了数据查询过程中的中间环节,避免了额外的数据块读取操作。
 
    二是索引表中的记录,是按照主键列进行排序存储的。对于主键列范围内的查询,用户可以获得更快的查询速度。这主要是因为在表格的ROWID伪列中,直接存储了主键信息。
 
    三是利用溢出存储功能,提高常用列的访问速度。在后台数据库表中,可能有几十个字段。但是,前台用户在查询的时候,往往不需要访问所有的字段。那些用户经常要访问的列,就叫做常用列。对常用列与不常用列区别明显的,可以通过溢出存储功能,提高常用列的访问速度。即将表中不经常需要访问的非主键列不存储在B树的叶子节点中,而是存储在一个具有堆组织方式的溢出存储区中。若索引表比较大,使用溢出存储不但可以减少索引表所占用的存储空间,而且可以提高常用列的查询效率。当然,这只是针对常用列而言。若用户查询非常用列时,溢出存储就没有效果了。
 
    三、索引表的使用时机
 
    1、 通过关键字查询表的内容。
 
    如果在实际应用中,大部分是通过主键列来查询其他列的信息的时候,就可以考虑把这张表建立为索引表。
 
 
 
 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26451903/viewspace-732972/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26451903/viewspace-732972/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值