mysql - 如何在 "index file"中搜索搜索键

标签 mysql sql database oracle

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

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

最佳答案

an index points to the block of the file where data is actually stored.

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

索引有两种类型:

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

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

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

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

enter image description here

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

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

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

Example diagram taken from here

关于mysql - 如何在 "index file"中搜索搜索键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47464175/

相关文章:

php - 无法连接 : Access denied for user shout1@localhost (using password:YES) 'Error PHP/MySQL

php - 使用 PHP 更新某一特定数据会更新 MYSQL 中的整条记录

mysql - 如何在 mysql 中查找用户的二级连接,如 linkedin?

php - 注册不插入数据

SQL Server、远程存储过程和 DTC 事务

mysql - 数据库条目的存在取决于时间

MySQL/经典 ASP - 记录数

MySQL - 设置任何列等于一个值

sql - 插入多行时重复项会发生什么情况?

javascript - 从云端打开 .mdb