【问题标题】:Database indexing - how does it work?数据库索引 - 它是如何工作的?
【发布时间】:2011-02-26 15:40:26
【问题描述】:

索引如何提高数据检索的性能?

索引如何工作?

【问题讨论】:

标签: database performance indexing


【解决方案1】:

Oracle、MySQL 等数据库产品 (RDMS) 构建了自己的索引系统,它们为数据库管理员提供了一些控制权,但是除了人们在该领域进行研究外,没有人确切知道后台发生了什么,所以为什么要建立索引:

简单地说,数据库索引有帮助 加快数据检索。另一个 索引的最大好处是您的 服务器不必努力工作 获取数据。它们几乎相同 作为图书索引,提供 带有快速跳转点的数据库 在哪里可以找到完整的参考(或 查找数据库行)。

例如有很多索引技术:

  • 一级索引、二级索引
  • B-trees 和变体(B+-trees,B*-trees)
  • 散列和变体(线性散列、螺旋等)

例如,假设您有一个带有主键的数据库(简单地)并且这些所有数据都存储在块中(在硬盘中),所以每次您想要访问您不想增加的数据时访问时间(有时称为事务时间或 i/o 时间)索引通过使用这些主键帮助您将哪些数据存储在哪个块中。 Alice(主键是名字,不是很好的例子,只是给出一个想法)

Alice
...
...
AZ...
Bob
Bri
...
Bza
...

现在你在这个索引中有一个索引,你只存储 Alice 和 Bob 以及他们指向的块,这样用户可以更快地访问数据。RDMS 处理细节。

我没有提供详细信息,但如果您想深入研究这些主题,我建议您参加数据库课程或查看这本大多数大学都教授的热门书籍。

Database Management Systems Ramakrishn CGherke

【讨论】:

    【解决方案2】:

    每个索引都将索引字段单独存储、排序(通常)并在一个数据结构中,这使得找到正确的条目特别容易。数据库在索引中找到条目,然后将它们交叉引用到表中的条目(在聚集索引和覆盖索引的情况下,在这种情况下索引已经拥有了所有内容)。这种交叉引用需要时间,但比扫描整个表要快(您希望如此)。

    聚集索引是行本身与所有列* 与索引一起存储的位置。扫描聚集索引比扫描非聚集非覆盖索引要好,因为需要的查找更少。

    覆盖索引是查询只需要作为索引一部分的列,因此不需要查找行的其余部分(这通常有利于性能)。

    * 通常不包括 blob / 长文本列等

    【讨论】:

      【解决方案3】:

      书中的索引如何增加您找到正确页面的容易程度?

      浏览字母列表然后转到正确的页面比阅读每一页要容易得多。

      【讨论】:

      • 非常禅。一个索引再生的声音是什么?
      • 答案旨在提供帮助而不是神秘。思考如何创建和使用图书索引可能会带来启发。
      【解决方案4】:

      这过于简单化了,但一般来说,数据库索引会创建另一个表中某些内容的列表,以使数据库引擎可以快速找到信息的方式进行排列。通过有意识地组织表格内容,这消除了通过扫描整个表格来查找一行数据的需要,从而提高了搜索的创建效率。

      【讨论】:

        【解决方案5】:

        索引为查找查询提供了最佳的数据结构。如果您的数据集变化很大,您可能还会考虑更新/重新生成索引的性能。 有很多开源索引引擎,例如 lucene,您可以在线搜索有关性能基准的详细信息。

        【讨论】:

          猜你喜欢
          • 2017-02-17
          • 2010-09-05
          • 2011-08-31
          • 2013-06-05
          • 2017-12-26
          • 1970-01-01
          • 2017-11-08
          • 2011-04-03
          • 2018-11-27
          相关资源
          最近更新 更多