查询优化器概览

本页面介绍了 Spanner 查询优化器及其优势。

概览

Spanner SQL 查询优化器会转换声明式 SQL 语句, 它描述了查询需要什么数据,将其转换为命令式执行计划, 介绍了一种精确获取数据的方法。迁移过程 将声明式语句转换为查询执行计划涉及到 执行到树结构的转换,用于表示查询。在生成执行计划的过程中,优化器会保留原始 SQL 查询的逻辑含义,以便返回正确的行。

优化器的另一个重要作用是生成一个 效率。

Spanner 优化器如何生成高效的执行计划?

Spanner 的优化器结合使用了成熟的启发法 和基于费用的优化技术来制定高效的计划。有些启发词语 例如“在远程机器上执行过滤器,而不是拉取 将数据传输到本地机器”。其他启发法更为复杂,但仍具有移动逻辑的原则,使得数据量更接近数据。在将数据分开存放在多台机器中的系统中,该原则尤其重要。

并非所有执行决策都能使用此类固定规则有效做出,因此 Spanner 的优化器也会根据估算的 替代成本。此类费用估算值是按照 查询、数据库架构以及 将由查询的片段生成例如,Spanner 将估算“Songs”表有多少行符合过滤条件 如果该过滤条件出现在查询中,则返回 SongGenre = "Country"。为了帮助 Spanner 会定期收集 统计信息,描述数据库中数据分布的特征。

此外,Spanner 还可以自动优化查询执行, 确定是否应采用面向行还是针对列的处理方法 查询。如需了解详情,请参阅优化扫描

如需详细了解查询执行计划及其使用方式 Spanner 如何在分布式环境中执行查询,请参阅 查询执行计划

查询优化器版本控制

随着时间的推移,Spanner 查询优化器将不断改进,扩大 查询执行计划中的一组选项,并提高查询 根据估算值做出明智选择,从而更高效地进行查询 执行计划

Spanner 发布优化器更新作为新的查询优化器 以提高其查询执行计划的效率。了解详情 如需了解不同的版本,请参阅 Spanner 查询优化器版本

查询优化器统计信息软件包

Spanner 维护有关表的数据分布的统计信息 列来帮助估算查询将生成多少行。查询 优化器使用这些估算值来帮助选择最佳查询执行计划。 Spanner 会定期更新这些统计信息。由于 统计信息用于选择查询执行计划 更新后,Spanner 可以更改 使用它来进行查询

默认情况下,数据库会自动使用最新生成的统计信息软件包。您可以将数据库固定到较早的统计信息软件包版本。您还可以选择使用并非最新的统计信息软件包来运行个别查询。

构建新的统计信息软件包

Spanner 每隔 1 次会自动生成新的统计信息包 。要手动构建新的统计信息包,请使用 GoogleSQL ANALYZE DDL 语句或 PostgreSQL ANALYZE DDL 语句。

在对数据库的数据或架构进行重大更改后,创建新的 统计信息包最佳做法是 如果发生以下情况,则创建新的统计信息软件包:

  • 数据库需要处理大量的插入、更新或删除操作。
  • 向数据库添加新索引。
  • 您在表格中添加一个新列。

运行 ANALYZE DDL 语句 更新架构,并启动 长时间运行的操作

Spanner 执行完语句后, 查询优化器在其 查询规划

统计信息软件包的垃圾回收

Spanner 中的统计信息包保留 30 天, 创建后,这些对象将被作为垃圾回收处理。

Spanner 内置 INFORMATION_SCHEMA.SPANNER_STATISTICS 表中列出了可用的统计信息包。此表中的每一行按名称列出一个统计信息软件包,且名称包含给定软件包的创建时间戳。每个条目还包含一个名为 ALLOW_GC 的字段,用于定义是否可以对软件包进行垃圾回收。

您可以将整个数据库固定到该表中列出的任何一个软件包。系统不会对固定的统计信息包进行垃圾回收, 只要数据库被固定到此软件包,ALLOW_GC 就会被忽略。如需将特定统计信息软件包用于个别查询,该软件包必须通过 ALLOW_GC=FALSE 列出或已固定。这样可以防止查询在 统计信息包已被垃圾回收。您可以将 使用 GoogleSQL ALTER STATISTICS 或 PostgreSQL 执行 ALLOW_GC ALTER STATISTICS DDL 语句。

文件包保留和个人身份信息 (PII)

根据标准行业做法,统计信息软件包包含列数据的直方图。这有助于查询优化器选择最佳查询计划。直方图是使用值的小样本构建的。这个小数据集可能包含个人身份信息。

Spanner 会定期创建新的统计信息包,并 默认将其保留 30 天。因此,从 中删除了少量值样本, 数据库可能会在统计信息直方图中额外保留 30 天。 使用 optimizer_statistics_package 个数据库选项固定的统计信息包 或具有 ALLOW_GC=FALSE 选项的软件包不会被垃圾回收。 这些包中的直方图可能包含从数据库中删除的 。此外,我们还在 Google Analytics 中 数据库备份

优化器统计信息在存储时会采用与用户数据相同的加密方式。

这些软件包所需的总存储空间通常少于 100 MB,并且会计入您的总存储费用。

后续步骤