站点图标 AI技术聚合

解释 SQL 查询以获得更好的性能

解释 SQL 查询以获得更好的性能

原文标题Explaining SQL Queries for Better Performance

DATA ENGINEERING

解释 SQL 查询以获得更好的性能

窥探数据库查询执行引擎

Background

数据分析师和数据工程师面临的最常见问题之一是非性能查询,通常称为慢查询。这些查询很慢,通常不是因为处理查询的资源短缺,而是因为您编写的查询效率低下,使用的资源远远多于应有的资源。

大多数数据分析师和一些数据工程师对数据库内部结构知之甚少。那么,如何修复和优化慢查询呢?事实证明,您无需成为数据库专家即可修复慢查询。大多数数据库系统为您提供了一种通过公开数据库执行查询的方式来窥探数据库内部工作的方法。这些是查询计划。

查询优化器创建查询计划。优化器会提出替代计划来执行您的查询,以充分利用您的资源。我将在另一篇文章中详细讨论不同类型的优化器。无论您的数据库使用哪种优化器,它都将遵循大多数数据库订阅的执行顺序,如下所示:

优化器将查看预定义的规则、表和列使用统计信息,并找出更好地运行查询的方法。例如,一些高级优化器(在 Spark 3.0 中)也可以在运行时更改查询计划。这种执行查询的自适应方式在分布式系统中最有用,在分布式系统中,您的查询执行可能会受到不同节点在其他时间完成工作的影响。

查询计划的输出

大多数数据库通过让您使用称为 EXPLAIN 的简单 SQL 关键字来公开计划。如果您执行一条 EXPLAIN 语句,您的数据库将制定一个计划并将其打印在您的 GUI 或控制台上。每个数据库都有不同的内部术语来表示查询执行过程中的不同步骤。查询计划通常包括每个步骤的以下内容:

请记住,成本是一个任意数字。一些数据库将其映射到获取的数据库页数;其他人做事不同。查看计划的想法是将其视为一个整体——包括总成本、获取的行数、扫描的行数等。

修复不良查询

查看查询执行计划,您可以快速确定您的查询是否正在执行以下操作之一(此列表并非详尽无遗):

一旦确定它,您就可以采取必要的步骤来解决问题。

查询计划的风格

大多数数据库都为您提供了一种查看查询执行详细信息(估计的,如果不是实际的)的方法,但是所有数据库的详细信息都不同。因此,选项也是如此。一些数据库允许您查看估计的执行计划,而其他数据库还允许您查看实际的执行计划。如何?通过执行查询并记录优化器的决定。

EXPLAIN 计划也有不同的详细程度和不同的格式。详细程度通常由 EXTENDED 关键字或 VERBOSE 关键字表示。以下是不同数据库的一些示例及其 EXPLAIN 使用规范:

Conclusion

查询执行计划对于了解查询的工作方式和修复查询的性能问题至关重要。 EXPLAIN 通过让您了解执行计划来帮助您实现这两个目标。如何充分利用这些计划取决于您——您是想阅读未格式化的计划,还是想将它们可视化,或者您想将它们存储为 JSON 文档以供以后分析。看看这会把你带到哪里。如果您是数据分析师或数据工程师,那么您肯定需要做一些解释。

如果您觉得我的文章有用,请订阅并查看我在 🌲 Linktree 上的文章。您也可以考虑通过使用我的推荐链接购买中等会员资格来支持我。[0]

文章出处登录后可见!

已经登录?立即刷新
退出移动版