加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

索引(一):顺序索引(稠密索引,稀疏索引和B+树索引)

(2014-12-09 18:43:00)
标签:

数据库

it

分类: 数据库概念与技术



      为了快速随机存取文件中的记录,可以使用索引结构。不管是从字面意思来讲,还是从生活的其他领域来讲,索引都可以被解释为快速定位。

一.聚集索引和非聚集索引

    1.聚集索引:包含记录的文件按照某个搜索码指定的顺序排序,那该搜索码对应的索引称为聚集索引;也称为主索引;

    2.非聚集索引:搜索码指定的顺序与文件中记录的物理顺序不同的索引;也称为辅助索引;

这里“索引”是个抽象的概念,或者说是一个状态概念,而不是具体的某个索引文件;在某个搜索码上建立了索引,我们就说某个属性有索引。所以说,记录文件和索引文件是不同的概念,下面我们来说明

二.索引记录和索引顺序文件

    1.索引记录(索引项)是由一个搜索码值和指向具有该搜索码值得一个或多个记录的指针构成,是在某个搜索码上建立了索引之后生成的;

这里的指针指向的是磁盘空间(磁盘块的标识,标识磁盘块内内记录的块内偏移量);

    2.索引顺序文件是指在某个搜索码上有聚集索引的文件;

所以可以说,索引记录是在记录文件(简单理解为一个表)的某个属性上建立了索引而生成的;

三.顺序索引的分类

    1.稠密索引:文件中每个搜索码值都有一个索引记录;

    2.稀疏索引:相对于稠密索引,稀疏索引只为某些搜索码值建立索引记录;在搜索时,找到其最大的搜索码值小于或等于所查找记录的搜索码值的索引项,然后从该记录开始向后顺序查询直到找到为止。

分情况看利弊,如果记录量适中,用稠密索引可以获得较好的响应时间;

如果记录量很多,百万级的,用稠密索引,索引(文件)本身就很难以去维护,因为搜索索引时的跨磁盘块数就至关重要(因为处理数据库请求的主要时间开销就是把块从磁盘读到主存的时间),而索引在磁盘上以顺序文件存储,对数量很多的索引记录的查询就会涉及到多个块,这是我们不希望的。但是对每个块建立稀疏索引已经是公认的利远远大于弊的做法。

对于上述庞大稠密索引的解决办法之一就是建立多级索引,于是就引出了B+树索引的理念。两个概念很像,但是也有不同;

四.B+树索引

索引顺序文件组织最大的缺点就在于,随着文件的增大,索引查找性能和数据扫描性能都会下降。

B+树索引结构是使用最为广泛的,在数据插入和删除的情况下仍能保持执行效率的几种索引结构之一。

B+树索引中的B就是Balance,顾名思义,平衡树,是B树的一种变形;

B+树索引虽然在有数据插入和删除时效率不高,但是,用自己的话来说,就是B+树能做到一步到位,一劳永逸,加上其在查找上的高效,所以才能受到追捧。

 http://s6/mw690/0030wlwZzy6OfCkYCI5a5&690

上图是一个B+树示意图,叶子节点直接存储记录,在搜索时按照稀疏索引的搜索方法,找到大于最小(相当于小于等于)的那个节点,一级一级往下搜索。

关于B+树的增删导致的节点变动这里不再说了,具体内容可参照数据结构。

0

阅读 收藏 喜欢 打印举报/Report
前一篇:Normal Form
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有