【发布时间】:2011-02-26 15:40:26
【问题描述】:
索引如何提高数据检索的性能?
索引如何工作?
【问题讨论】:
标签: database performance indexing
索引如何提高数据检索的性能?
索引如何工作?
【问题讨论】:
标签: database performance indexing
Oracle、MySQL 等数据库产品 (RDMS) 构建了自己的索引系统,它们为数据库管理员提供了一些控制权,但是除了人们在该领域进行研究外,没有人确切知道后台发生了什么,所以为什么要建立索引:
简单地说,数据库索引有帮助 加快数据检索。另一个 索引的最大好处是您的 服务器不必努力工作 获取数据。它们几乎相同 作为图书索引,提供 带有快速跳转点的数据库 在哪里可以找到完整的参考(或 查找数据库行)。
例如有很多索引技术:
例如,假设您有一个带有主键的数据库(简单地)并且这些所有数据都存储在块中(在硬盘中),所以每次您想要访问您不想增加的数据时访问时间(有时称为事务时间或 i/o 时间)索引通过使用这些主键帮助您将哪些数据存储在哪个块中。 Alice(主键是名字,不是很好的例子,只是给出一个想法)
Alice
...
...
AZ...
Bob
Bri
...
Bza
...
现在你在这个索引中有一个索引,你只存储 Alice 和 Bob 以及他们指向的块,这样用户可以更快地访问数据。RDMS 处理细节。
我没有提供详细信息,但如果您想深入研究这些主题,我建议您参加数据库课程或查看这本大多数大学都教授的热门书籍。
【讨论】:
每个索引都将索引字段单独存储、排序(通常)并在一个数据结构中,这使得找到正确的条目特别容易。数据库在索引中找到条目,然后将它们交叉引用到表中的条目(在聚集索引和覆盖索引的情况下,在这种情况下索引已经拥有了所有内容)。这种交叉引用需要时间,但比扫描整个表要快(您希望如此)。
聚集索引是行本身与所有列* 与索引一起存储的位置。扫描聚集索引比扫描非聚集非覆盖索引要好,因为需要的查找更少。
覆盖索引是查询只需要作为索引一部分的列,因此不需要查找行的其余部分(这通常有利于性能)。
* 通常不包括 blob / 长文本列等
【讨论】:
书中的索引如何增加您找到正确页面的容易程度?
浏览字母列表然后转到正确的页面比阅读每一页要容易得多。
【讨论】:
这过于简单化了,但一般来说,数据库索引会创建另一个表中某些内容的列表,以使数据库引擎可以快速找到信息的方式进行排列。通过有意识地组织表格内容,这消除了通过扫描整个表格来查找一行数据的需要,从而提高了搜索的创建效率。
【讨论】:
索引为查找查询提供了最佳的数据结构。如果您的数据集变化很大,您可能还会考虑更新/重新生成索引的性能。 有很多开源索引引擎,例如 lucene,您可以在线搜索有关性能基准的详细信息。
【讨论】: