什么是数据库索引:它是如何工作的以及它有什么作用?

数据库索引 SQL 数据库索引的重要性 索引类型 索引

SQL数据库索引是对数据记录进行分类和排列的过程。 任何使用数据库的人都会欣赏此功能在查找特定数据时节省的时间。 在本文中,我们探讨了数据库索引 SQL 的定义、类型以及数据库索引的重要性。 享受车程!

什么是数据库索引?

数据库索引是有助于更快地进行表查找的数据结构。 数据库在没有索引的情况下仍然可以工作,但查询可能需要更长的时间才能返回结果。 每个索引都包含一个键,该键由其对应表中的一列或多列数据组成。 当查询需要访问带有索引的表时,数据库可以选择利用索引来加速记录检索。

当用户输入查询时,查询通常会对每一行进行线性搜索,检查其中是否有任何行包含所需的信息。 使用索引可以简化这一过程,从而提高生产力,因为它缩短了完成任务所需的时间。

数据库索引的类型

数据库索引有不同类型。 以下是数据库索引的类型:

#1. DBMS 中的主索引

主数据库索引是一个两字段、有序、固定长度的文件。 第一个字段作为主键,第二个字段指示哪个数据块包含指定信息。 主数据库索引条目之间始终存在一一对应关系。 DBMS 中使用的主要索引有两种不同的类型。

  • 致密指数
  • 稀疏指数

#2. DBMS 中的二级索引

数据库管理系统 (DBMS) 中的候选键是每个条目都具有唯一值的字段。 它是一种不将数据分组到簇中的索引。 这种在两个级别上对数据库建立索引的方法用于最小化初始映射级别的大小。 因此,初始阶段会选择大范围的整数,而映射大小本身则保持固定适度。

索引有什么作用?

通过索引将未排序的表排序,从而通过查询提高搜索效率。 未索引的表需要跨行进行线性搜索,因为查询不可能知道行的顺序并相应地优化自身。 也就是说,查询需要遍历每一行以查找满足条件的行。 正如您所料,这可能需要相当长的时间。 

数据库索引如何工作?

每当查询环境发生变化时,期望数据库表自行重组以提高查询性能是不切实际的。 实际上,发生的事情是数据库构建了一个 数据结构 响应该指数。 B 树可能是正在使用的数据结构类型。 B 树有几个好处,但它可以轻松排序这一事实对于我们的需求来说是最重要的。 由于上述原因,排序数据结构提高我们搜索的有效性也就不足为奇了。

请注意,当数据库索引为给定列构建结构时,它仅存储有关该列的信息; 不包括其他列。 

你也可以阅读:

创建数据库索引的技巧

以下是创建数据库索引的提示:

#1. 按工作量划分的索引

可以根据正在处理的数据量来制定有效的数据库索引。 不要将索引创建过程基于您拥有的表的数量(这可能会使访问变得更加困难),而是专注于创建有助于搜索某些术语的数据库索引。

#2. 你应该使用谓词

使用谓词创建数据库索引是另一个可行的选择。 谓词是一种用于确定语句真值的条件表达式。 除了简化数据库索引开发之外,这还可以帮助用户对要检索的数据做出明智的选择。

为了找到建筑项目所需的工具和用品,为该行业设计的数据库可能会在其索引中使用谓词。 员工可能会利用它来验证几个月前的类似项目是否使用了相同的材料。

通常还会构建针对最流行的数据库索引 SQL 查询定制的索引,以实现最佳效率。 其中可能包括所有可能的数据库索引 SQL 查询及其估计使用频率的概要,其中突出显示了最关键的查询。

当学校必须进行标准数据库搜索时,例如找出哪些孩子被叫回家最多或哪些孩子因病长时间缺勤,这可能会很有帮助。 这在紧急情况下很有帮助,因为它有助于快速轻松地检索父母的联系信息。

#4。 通过创建索引来避免排序的需要

创建不需要排序的索引可以加快查询检索所需数据的速度。 数据库用户通常可以使用“Group by”和“Order by”子句手动对记录进行排序。 您可以通过在这两种排序使用的列上构建索引来优化数据库速度。 由于不需要对记录进行排序,因此可以进一步优化查询。

#5。 制作独一无二的索引

在开发有效的数据库时,员工经常需要创建许多独一无二的索引。 这一点至关重要,因为它通过消除表列中重复的可能性来防止数据损坏。 绝大多数数据库系统使用约束或表中的数据始终遵循的规则来生成唯一索引。 主键还用于帮助识别表中的数据。

#6。 考虑外键

员工可以通过创建与数据库使用的每个外键相关的索引来优化数据库的性能。 外键是一个数据库中的一组列,提供对另一个数据库中的表的访问。 大多数数据库系统不需要这些索引,但无论如何都可以提高生产力。 该数据库可能不包含员工所需的所有信息,但此密钥可能会引导他们在另一个数据库中找到正确的结果。

#7. 插入专门用于数据库索引的列

在某些情况下,员工可能会发现向其数据库添加多个仅数据库索引列很有用。 工作人员现在可以快速检索仅索引信息。 这样,任何用户输入的查询都只需在这些新添加的索引列中进行搜索。 这加快了提供员工所需的特定数据的过程。 但应该注意的是,工作人员现在必须检查其他查询,看看新列是否会影响他们完成工作的能力。

#8。 避免索引数量的限制

建议创建时不限制数据库索引的数量。 为了正确优化数据库,最好有尽可能多的索引,因为每个索引都充当优化器,加速检索数据的过程。 值得注意的是,这不仅对当事人有帮助,而且对当事人也有帮助。 在大多数工作场所,数据库及其包含的信息与员工共享。 这意味着它有可能提高整个组织的产出。

#9。 检查是否存在大量数据修改含义

为了节省时间,工作人员可能更愿意跳过手动输入数据。 他们可以通过考虑对数据所做的任何更改的结果来实现这一目标。 存在一些实现此目的的选项。 例如,员工可能会查看表的索引。 如果索引数量已经多于列,那么添加另一个数据库索引很可能不会显着影响性能。 员工还可以通过对表运行查询来检查查询的执行时间。 创建数据库索引的价值取决于执行查询所需的时间。

如果工作人员需要添加或删除数据来生成自己的索引,他们可以在考虑对数据库其余部分的影响后执行此操作。 例如,如果数据库中充满了供应商的联系方式,那么删除将公司与特定员工联系起来的电话号码是愚蠢的。

数据库索引的内部工作原理

数据库索引 SQL 在内部构造为树。 数据库索引以图形方式描述为树,各个记录代表叶子。 通过指针连接的多个节点组成了数据库索引树的结构。

当执行CREATE INDEX命令时,会生成一棵索引树。 数据库程序中的算法负责创建索引树。 索引构建过程首先是按索引键对记录进行排序。 一旦创建了树索引中的所有节点,就会在它们之上构建结构。 当数据库中有很多记录时,创建索引树可能会很耗时。

为了找到表中的特定行,我们必须从叶节点开始索引搜索。 在每一个岔路口,都必须选择走哪条路。 这就需要对搜索条件和每个分叉内的值进行深入分析。 以在二叉树中搜索数字 12 的情况作为一个非常基本的说明。 数字 0–10 位于分支 X,而数字 11–20 位于分支 Y。由于 12 高于 11,因此您应该查看那里。

B 树是专用索引树的一个示例。 平衡树或 B 树从根到每个叶节点具有相同数量的节点。

数据库索引的底层工作原理

索引只是一种数据结构,它通过存储对各个项目的引用来提供对相关信息的轻松访问。 在没有索引的情况下,数据库中的数据行通常保存在无组织的“堆”中。 Microsoft SQL Server 和 Azure SQL 数据库都有一个开关,可用于启用或禁用此功能。

实际上,数据很少以完全非结构化的状态保存。 通常使用主键,在 MySQL 中可以与索引相同; 它们可能采用自动递增整数的形式。 然而,排序(具有唯一值)的“二进制”效率仅限于对有序列进行筛选的查询,因为只能使用一列对数据进行排序。 具有索引的表可以使用二分搜索有效地搜索,因为它可以按许多列排序。

当您对列进行索引时,您实际上创建了一个包含两列的新表:您索引的列和指向您要查找的项目位置的指针。 索引的长度将与原始表相同,但其宽度将明显更小,需要更少的磁盘块来存储和遍历。 在 MySQL 中,指针的大小往往小于 5 个字节。 对于那些有兴趣深入研究的人,上面引用的“传奇”Stack Overflow 帖子解释了存储所需块数背后的算术。

除非您从头开始构建它们,否则您当前的数据库可能有大量索引。

数据库索引的重要性

数据库索引的重要性永远不容忽视,但它们会产生额外写入的成本,并且需要额外的存储空间来保持数据的重复副本最新。 数据库索引的另一个重要性是它们需要定期维护以确保最佳性能。 然而,使用索引的好处远远超过了维护索引的轻微不便。 索引需要定期维护才能正常运行。 索引重建、重组和碎片检查都属于此类任务。

拥有索引的成本

与生活中的大多数其他事物一样,索引也是需要花钱的。 如果表中的任何行发生更改(通过 INSERT、UPDATE 或 DELETE),则必须更新表中的所有索引。 这些修改会花费时间,并且当数据库中存在多个索引时,广泛编辑表的进程的性能可能会受到影响。

在继续之前,我们必须权衡构建指数的收益和成本。 我们能否预期效率显着提高? 这是一个统计表还是被广泛操纵了? 当我们调整表格时,我们可以忍受性能下降吗? 这次检查的结果将告诉我们是否需要制定该指标。 有些数据库甚至能够根据需要自动构建和消除索引。

关于数据库索引不要忘记的事情

关于数据库索引,不要忘记以下几点:

  • 索引涉及添加带有搜索条件列和指针的数据结构。
  • 该指针是包含剩余数据的行的内存磁盘位置。
  • 对索引数据结构进行排序可以提高查询性能。
  • 查询在索引中定位所需的行; 一旦找到,索引就会提供对其余数据的引用。
  • 使用索引,查询只需要查看四行而不是十七行。

什么是傻瓜指数?

指数是用作衡量标准的数值。 该术语用于描述证券市场走势的定量分析。 金融市场中的股票市场指数和债券市场指数均由虚构的证券投资组合组成,旨在代表整个市场或其子集。

索引的目的是什么?

指数是一种统计工具,用于监测通货膨胀、失业率、GDP 增长、生产率和股市回报等经济指标。

最后的思考

索引比让员工不断重新排列数据库以响应新查询要高效得多。 另一方面,索引生成其自己的内部数据库层次结构。 例如,数据库索引可能采用 B 树结构。 此外,还支持具有两个或更多分支的节点,因此工作人员可以扩展到简单的二进制搜索之外。

参考资料

发表评论

您的电邮地址不会被公开。 必填带 *

你也许也喜欢