【问题标题】:How search key is searched in the "index file"如何在“索引文件”中搜索搜索键
【发布时间】:2017-11-23 22:44:18
【问题描述】:

目前我的理解是,在数据库中,数据实际上是以文件块的形式存储在硬盘上的,而索引指向文件中实际存储数据的块。

现在,我想知道的是如何在索引文件中搜索搜索键,假设我的查询是 select empname from employee where empid = 12345 并且我在 empid 上有索引,那么我认为“索引文件" 将包含所有员工 ID。然后如何依次搜索empid 12345?

【问题讨论】:

  • 在Oracle方面,表数据和索引数据存储在块中会更准确一些,它们都存储在段中,存储在表空间中,存储在存储在磁盘上的数据文件中。

标签: mysql sql database oracle


【解决方案1】:

索引指向数据实际所在的文件块 存储。

非聚集索引指向数据的实际存储位置

有两种类型的索引:

  • 聚集索引 - 行物理存储在磁盘中 按照索引中指定的顺序。
  • 非聚集索引 - 对数据页的引用 已存储。

一张表只能有一个聚集索引(因为数据只能以一种方式物理存储),但可以有许多非聚集索引。

使用您描述的索引查找数据的过程称为索引查找

考虑下图,它与您的示例相似

索引查找将从根节点开始(图中的第 2 级)要找到您的 12345 示​​例,我们必须通过树的左分支向下到第 1 级,因为我们正在寻找的值属于值范围。

然后我们有多个叶节点来查找我们在级别 0 上的值(为简单起见,图中显示了三个,但可能有数百个)图中的每个叶节点都有 2000 个值,所以我们然后转到拥有 12345 的那个。我们然后搜索该范围内的每个值并检查它是否为 12345。

一旦我们有了我们的值,接下来会发生什么取决于索引是聚集索引还是非聚集索引,如果是聚集索引,我们检索该值,如果是非聚集索引,我们转到它引用的数据页,然后检索值。

Example diagram taken from here

【讨论】:

    猜你喜欢
    • 2012-12-04
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    • 2010-10-06
    • 2021-10-13
    • 1970-01-01
    相关资源
    最近更新 更多