您还未登录! 登录 | 注册 | 帮助  

您的位置: 首页 > 软件开发专栏 > 数据库 > 正文

数据库,索引优秀实践

发表于:2021-04-09 作者:闻数起舞 来源:今日头条

处理数据库索引的简短指南

数据库索引通常很糟糕。只有在设计和有效地使用时才实现数据库索引的权力。否则,索引是磁盘空间和数据库性能的纯粹浪费。但是你不想浪费磁盘空间,所以让我们快速通过一些您需要正确设计和使用索引所需的内容。

只有一个原因创建数据库索引 - 仅在数据库上提供现有或将来的查询负载,即必须根据当前或预期的使用设计索引。所有主要数据库都提供了一种监控索引使用的方法。

使用where子句

SQL查询中的WHERE子句过滤数据。索引在基于某些关键列以预定义的顺序存储数据时,在滤除数据中有助于滤除数据。如果查询使用这些键列,将使用索引,滤波器将更快。

当在Where子句中引用密钥列时,索引的存在不保证其使用情况。因此,您必须确保正在使用索引。大多数数据库都有一个名为查询引擎的组件,该组件决定了许多执行计划中的哪一个来确保查询的最快结果。

查询引擎伴随着解释命令,帮助我们获取执行计划并列出计划的每一步的成本。

有效地使用数据类型

数据库支持只有少量数据类型。已创建所有数据类型以提供特定目的。如果您不使用旨在服务该目的的数据类型,您将在数据库上放入额外的负载以进行隐式铸造,额外的磁盘空间等。

避免的简单方法是使用DateTime来存储日期和时间,使用整数来存储整数。不要使用VARCHAR将所有内容从数字存储到JSON对象。大多数数据库现在支持JSON作为本机数据类型。这意味着您可以使用SQL有效地存储和检索来自数据库中的JSON对象的数据。

不要过度索引

索引创建必须在利用磁盘空间,增加管理开销和增加查询性能之间进行平衡。您无法创建索引以将空间保存为数据库查询性能。您还无法在所有列上创建索引以提供所有查询。它不像那样工作。

您必须通过识别以下内容来检查查询工作负载 -

  • 用于过滤Filter数据的列。
  • 用于联结Join表的列。
  • 用于排序Order数据的列。
  • 用于分组Group数据的列。
  • 用于过滤,Join,Oder或Group的组合使用的列。

这五件事将决定需要创建多少个索引,索引列应该在索引中有什么组合,优先顺序。

请注意,Column_P上的索引IDX_A,Column_Q DESC与

  • Column_Q中的索引IDX_A,列P或,
  • index idx_b在column_p desc上,列q

还要确保您使用一些工具或脚本来标识数据库中是否存在重复索引。

知道不使用索引时

谨防样品条款的诱惑。这是一个指数杀手。知道索引的第一列必须始终存在于要使用的查询的过滤器,订单,加入或组操作中。如果您使用LACE子句使用索引过滤数据,则您应该知道您无法期望索引在类似于“%的东西”中的内容。

当数据库引擎无法隐式地映射数据类型,字符集或索引列的排序时,也没有使用索引。有关此内容的更多详细信息,并查找更多关于索引的限制,请使用此链接。

结论

如果未正确使用,数据库索引可以证明是在反转的角色中,即,它们可以妨碍数据库的性能而不是增强它。为确保数据库由于索引不良而受到影响,请确保正确索引管理,经常探望索引,并正确分析新索引创建。