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

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

(2017-12-04 18:43:00)
    <div class="articalTag" id="sina_keyword_ad_area">
        <table>
            <tbody><tr>
                <td class="blog_tag">
                <script>
                var $tag='数据库,it';
                var $tag_code='e4ab2974044a92625265a0e961702d69';
                var $r_quote_bligid='a446ddf10102v7hs';
                var $worldcup='0';
                var $worldcupball='0';
                </script>
                                        <span class="SG_txtb">标签:</span>
                                                                            <h3><a href="http://search.sina.com.cn/?c=blog&amp;q=%CA%FD%BE%DD%BF%E2&amp;by=tag" target="_blank">数据库</a></h3>
                                                                            <h3><a href="http://search.sina.com.cn/?c=blog&amp;q=it&amp;by=tag" target="_blank">it</a></h3>
                                                            </td>
                <td class="blog_class">
                                        <span class="SG_txtb">分类:</span>
                    <a target="_blank" href="http://blog.sina.com.cn/s/articlelist_2756107761_1_1.html">数据库概念与技术</a>
                                    </td>
            </tr>
        </tbody></table>
    </div>
                    <!-- 正文开始 -->
    <div id="sina_keyword_ad_area2" class="articalContent   newfont_family">
        <p><br>


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

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

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

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

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

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

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

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

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

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

三.顺序索引的分类

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

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

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

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

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

四.B+树索引

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

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

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

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

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

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

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

    </div>
                    <!-- 正文结束 -->
    <div id="share" class="shareUp">
        <div class="share SG_txtb">
        分享: 
        <div class="bshare-custom" style="display:inline;margin-left:5px;"><div class="bsPromo bsPromo2"></div><a title="分享到新浪微博" class="bshare-sinaminiblog" href="javascript:void(0);"></a><a title="分享到微信" class="bshare-weixin" href="javascript:void(0);"></a><a title="分享到QQ空间" class="bshare-qzone" href="javascript:void(0);"></a><a title="分享到豆瓣" class="bshare-douban" href="javascript:void(0);"></a><a title="更多平台" class="bshare-more bshare-more-icon more-style-addthis"></a>
        </div>
        </div>
        <div class="up">
            <div title="喜欢后让更多人看到" id="dbox_a446ddf10102v7hs" class="upBox upBox_click" style="cursor: pointer;">
                <p ti_title="索引(一):顺序索引(稠密索引,稀疏索引和B+树索引)" id="dbox2_a446ddf10102v7hs" class="count" mnum="3">3</p>
                <p class="link"><img width="15" height="15" align="absmiddle" src="http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif" class="SG_icon SG_icon34">喜欢</p>
            </div>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值