ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Oracle索引----反转键索引

Oracle索引----反转键索引

原创 Linux操作系统 作者:无名雪狼 时间:2011-05-25 14:34:19 0 删除 编辑

   当我再初学oracle的时候,我拿了一本厚厚的书,看啊看,当我看到索引部分的时候,我很好奇的看到了反转键索引,这是在我所学习的其他数据库管理系统中所没有看到过的索引,或许这也是oracle卖三十多万的原因之一。


 

       我很理解初学oracle的反转键索引时的郁闷,曾经网上有一哥们问过我:什么是反转键索引?当时我只说了反转键索引的概念:反转键索引就是将索引键的值反转过来进行索引,索引的结构没什么变化,只是索引值得存储方式有点不一样,比如说,要进行索引的列值是abcd是,在反转键索引中的存储就是dcba


 

       概念看上去很简单,可是我就纳闷了,这有什么用呢?为什么要翻过来存储呢?很纳闷···


 

       后来我才知道,其实反转键索引用处太大了。都知道,现在很多公司里再用oracle数据库,并将其搭建在商用unix系统上,但是这种系统也不是最完美的,因为这样搭建起来的系统最多只能支持1024cpu。这听起来好像很多了,可是要知道,在一些大型的公司里,或许这还不够用呢,1024cpu满足不了用户的需求,那怎么办呢?


 

       当硬件已经饱和的时候,就想办法在软件上进行扩展。这时,oracle就想到了一个办法进行扩充。比如说在一个公司里面,我需要超过1024cpu的系统,这时就可以搭建一个环境来扩展。如果公司有一个机房,前面有一台总机,下面有一大堆的电脑,这时,我就可以将一个被数据库协调管理的系统装在总机上,而在每台电脑上装一个数据库管理系统,每个都支持最多1024cpu,这样就扩展了公司的系统性能。用户的请求最先到达的是前面的总机,然后总机就会将用户的请求协调分配到下面的每台电脑上,这样就可以平衡用户的请求,是操作的速度加快。


 

       可是,这也存在一个问题。我们都知道,一般在公司、学校等等机构里面,成员的编号是有一定意义的,比如有的是用入职年月日在加上员工序号作为员工的编号,如071123入职的员工编号为07112310000711231001, 0711231002···在数据库中,为公司员工创建了一张表,员工编号是员工在公司的唯一性标号,所以可以为这些公司员工在数据库中以员工编号建立索引。索引是排好了序的,也就是说,索引中员工编号0711231000,0711231001,0711231002这样的连续值被索引到连续相近的地方,这样的话,这一索引块存储在某一台电脑上的可能形就非常大,如果有一个用户的请求是以员工编号为条件的话,那么总机将此用户请求分配下去之后,次用户请求还是会在某一台电脑上产生大量的io而影响用户请求的速度。那有什么办法解决这个问题呢?


 

       还真有办法解决,那就是使用反转键索引。使用反转键索引对员工编号进行索引之后,也就是0711231000,0711231001,0711231002这样的连续值变成了0001321107,1001321107,2001321107这样的不连续值,对这些不连续值进行索引之后,原本可能堆积在某一台电脑上的索引,就被分散存储在不同的电脑上了,这样,用户的请求就会被分散到多台电脑上,从而加快了用户请求的速度。

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

请登录后发表评论 登录
全部评论

注册时间:2011-01-14

  • 博文量
    9
  • 访问量
    31202