• 学前教育
  • 小学学习
  • 初中学习
  • 高中学习
  • 语文学习
  • 数学学习
  • 英语学习
  • 作文范文
  • 文科资料
  • 理科资料
  • 文档大全
  • 当前位置: 雅意学习网 > 学前教育 > 正文

    浅谈海量数据库中的索引技术:数据库索引

    时间:2019-02-07 03:29:25 来源:雅意学习网 本文已影响 雅意学习网手机站

      海量数据是新进出现的一个词,它用来形容数目巨大、空前浩瀚的数量。现代社会很多行业部门中都需要操作海量数据,如通讯部门需要操作通讯方面的数据,气象部门需要监测气象方面的数据,招考部门需要调用招考方面的数据,这些部门处理的数据量都非常大。包括各种文字、数字、时间、声音、图像、报表、超文本等各种类型的数据信息。伴随着海量数据的产生,存储这些数据的数据库――即海量数据库的概念应运而生。那么,如何实现快速地从这些超大容量的数据库中进行查询、分析、统计,以及提取数据后对数据进行分页已成为系统管理员和数据库管理员急需解决的难题。
      实现查询优化的关键任务是建立索引。索引是除表之外另一个重要的、由用户定义的存储在物理介质上的数据结构。当根据索引码的值搜索数据时,索引提供了对数据的快速访问。不过没有索引,数据库也能根据SELECT语句成功地查找到结果。但随着数据量和表变得越来越大,使用索引的好处就渐渐凸显出来。数据索引好比是一本书前面的目录,建立了索引之后就能加快数据库的查询速度。
      例如有以下的SQL语句:select * from table where id=215。
      如果没有建立索引,要查到这条记录,则必须找遍整个数据表,直到ID等于215的这一项被找到为止;建立了索引之后,直接在索引里面找215这一个数据项,就可以快速及精确得知这一项的位置。就如同在图书馆查找一本书,如果图书馆的书架上没有建立过索引目录,要找到编号为215这的书就相当费劲。但是书架上编过了索引和目录之后,要找到这本书应该是很容易的了。
      创建索引可以大大提高系统的性能。但是索引是不是越多越好呢?索引会占用数据空间,同时还会占用一定的物理空间。建立索引需要耗费时间;增加或删除数据的同时,都会导致索引改变。所以索引过多,也就没有真正的意义了,我们在处理数据时应该按需建立索引。
      索引可分为聚集索引和非聚集索引。
      聚集索引中的表数据按照索引的顺序来存储。对于聚集索引,叶子结点即存储了真实的数据行,不再有另外单独的数据页。非聚集索引中的表数据存储顺序与索引顺序无关。对于非聚集索引,叶结点包含索引字段值及指向数据页数据行的逻辑指针,该层紧邻数据页,其行数量与数据表行数据量一致。在一张表上只能创建一个聚集索引,因为真实数据的物理顺序只可能有一种。如果一张表没有聚集索引,表中的数据行没有特定的顺序,所有的新行将被添加到表的末尾位置。
      那么,索引真正的优点有哪些呢?可以总结为以下几点。
      (1)索引可以避免遍历整张数据表。多数查询可以仅通过扫描少量的索引页及数据页,而不需要查找历所有数据页。
      (2)对于非聚集索引,有些查询甚至可以不访问数据页。
      (3)聚集索引可以避免数据插入操作集中于表的最后一个数据页。
      (4)一些情况下,索引还可用于避免排序操作。
      1.聚集索引与插入操作
      最简单的情况下,插入操作根据索引找到对应的数据页,然后通过移动已有的记录为新的数据腾出空间,最后插入数据。如果数据页已满,则需要拆分数据页。页拆分是一种耗费资源的操作,一般数据库系统中会有相应的机制要尽量减少页拆分的次数,通常是通过为每页预留空间来实现。在该使用的数据段上分配新的数据页,如果数据段已满,则需要分配新段。调整索引指针,需要将相应的索引页读入内存并锁定。大约有一半的数据行被归入新的数据页中。如果表还有非聚集索引,则需要更新这些索引指向新的数据页。
      2.聚集索引与删除操作
      删除行将导致其下方的数据行向上移动以填充删除记录造成的空白。如果删除的行是该数据页中的最后一行,那么该数据页将被回收,相应的索引页中的记录将被删除。如果回收的数据页位于跟该表的其他数据页相同的段上,那么它可能在随后的时间内被利用。如果该数据页是该段的唯一一个数据页,则该段也被回收。对于数据的删除操作,可能导致索引页中仅有一条记录,这时,该记录可能会被移至邻近的索引页中,原索引页将被回收,即索引被合并。
      3.非聚集索引与插入操作
      如果一张表包含一个非聚集索引但没有聚集索引,则新的数据将被插入到最末一个数据页中,然后非聚集索引将被更新。如果也包含聚集索引,该聚集索引将被用于查找新行将要处于什么位置,随后聚集索引及非聚集索引将被更新。
      4.非聚集索引与删除操作
      如果在删除命令的Where子句中包含的列上,建有非聚集索引,那么该非聚集索引将被用于查找数据行的位置,数据删除之后,位于索引叶子上的对应记录也将被删除。如果该表上有其他非聚集索引,则它们叶子结点上的相应数据也要删除。如果删除的数据是该数所页中的唯一一条,则该页也被回收,同时需要更新各个索引树上的指针。由于没有自动的合并功能,如果应用程序中有频繁的随机删除操作,最后可能导致表包含多个数据页,但每个页中只有少量数据。
      可见在数据库中适当地建立索引,将大大缩短查询的时间,提高数据插入删除效率,在海量数据库中,对于索引的合理使用尤为重要。

    推荐访问:浅谈 海量 数据库中 索引

    • 文档大全
    • 故事大全
    • 优美句子
    • 范文
    • 美文
    • 散文
    • 小说文章