当前位置: 首页 > 科技观察

数据库,索引良好实践

时间:2023-03-22 17:11:06 科技观察

处理数据库索引的简短指南数据库索引通常很糟糕。数据库索引的威力只有在有效设计和使用时才能体现出来。否则,索引纯粹是对磁盘空间和数据库性能的浪费。但是您不想浪费磁盘空间,所以让我们快速了解一下正确设计和使用索引所需的一些事项。创建数据库索引只有一个原因——只为数据库上现有或未来的查询负载服务,即索引必须根据当前或预期的用途进行设计。所有主要数据库都提供了一种监视索引使用情况的方法。在SQL查询中使用WHERE子句来过滤数据。索引有助于过滤数据,同时根据某些关键列以预定义的顺序存储数据。如果查询使用这些键列,将使用索引并且过滤器会更快。当在Where子句中引用键列时,索引的存在并不能保证它的使用。因此,您必须确保正在使用索引。大多数数据库都有一个称为查询引擎的组件,它决定多个执行计划中的哪一个将确保最快的查询结果。查询引擎配合explain命令帮助我们获取执行计划并列出计划每一步的开销。有效使用数据类型数据库只支持少量的数据类型。所有数据类型都是为特定目的而创建的。如果您不使用专为该目的而设计的数据类型,您将给数据库增加额外的负载以进行隐式转换、额外的磁盘空间等。避免这种情况的简单方法是使用DateTime来存储日期和时间,并且整数来存储整数。不要使用VARCHAR来存储从数字到JSON对象的所有内容。大多数数据库现在都支持JSON作为本机数据类型。这意味着您可以使用SQL在数据库中高效地存储和检索来自JSON对象的数据。不要过度索引索引创建必须在利用磁盘空间、增加管理开销和提高查询性能之间取得平衡。您不能创建索引来为数据库查询性能节省空间。您也不能在所有列上创建索引来为所有查询提供服务。它不是那样工作的。您必须通过识别-用于过滤过滤数据的列来检查查询工作负载。用于连接Join表的列。用于对订单数据进行排序的列。用于对组数据进行分组的列。用于过滤的列,Join、Oder或Group的组合。这五件事将决定需要创建多少个索引,索引中应该有什么样的索引列组合,以及优先顺序。请注意,Column_P上的索引IDX_A、Column_QDESC以及Column_Q上的索引IDX_A、列P或column_pdesc上的索引idx_b、列q还要确保使用某些工具或脚本来识别数据库中是否存在重复索引。当知道不使用索引时要当心样本子句的诱惑。这是指数杀手。知道索引的第一列必须始终出现在要使用的查询的过滤器、顺序、连接或组操作中。如果您使用LACE子句过滤带有索引的数据,您应该知道您不能期望索引位于类似“%”的位置。当数据库引擎无法隐式映射索引列的数据类型、字符集或顺序时,也不会使用索引。有关这方面的更多详细信息,并了解有关索引限制的更多信息,请使用此链接。结论如果使用不当,数据库索引可能起到相反的作用,即它们会阻碍数据库的性能而不是提高它。为确保数据库因糟糕的索引而受到影响,请确保正确的索引管理、频繁访问索引并正确分析新创建的索引。

猜你喜欢