查询优化器

什么是查询优化器?

Cloud Spanner SQL 查询优化器将描述查询所需数据的声明性 SQL 语句转换为命令执行计划,该计划描述一种精确获取该数据的方法。将声明式语句转换为查询执行计划的过程涉及对用于表示查询的树形结构执行转换。预计在生成执行计划的过程中,优化器会保留原始 SQL 查询的逻辑含义,以便返回正确的行。

优化器的另一个重要作用是生成高效的执行计划。

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

Cloud Spanner 的优化器将成熟的启发法和基于成本的优化方法结合使用,以生成有效的计划。一些启发法非常简单,例如“在远程计算机上执行过滤条件,而不是将数据拉取到本地计算机上”。其他启发法较为复杂,但仍体现了迁移逻辑的原则,即减少数据量以更接近数据。在将多台机器分片数据的系统中,这一原则尤为重要。

并非所有执行决策都可以有效地使用此类固定规则,因此 Cloud Spanner 的优化器还会根据估算的替代成本做出决策。使用查询的结构、数据库的架构以及将由查询片段生成的数据量的估算值,可以计算出此类成本估算值。例如,如果该过滤条件显示在查询中,则 Cloud Spanner 会估算有多少行 Songs 表符合过滤条件 SongGenre = "Country"。为了帮助计算此类估算值,Cloud Spanner 会定期收集用户数据的统计信息。

要详细了解查询执行计划以及 Cloud Spanner 如何使用它们在分布式环境中执行查询,请参阅查询执行计划

查询优化器版本控制

随着时间的推移,查询优化器将不断改进,扩展查询执行计划中基于费用的选项集,并提高为这些选择提供信息的估算值的准确性,从而实现更高效的查询执行计划。

Cloud Spanner 将优化器更新作为新的查询优化器版本发布。默认情况下,每个数据库始终使用最新版本的优化器。为了更好地控制您的查询,我们推出了管理查询所用的查询优化器版本的功能。在提交到最新版本之前,您可以比较旧版本和最新版本的查询性能概况。要了解详情,请参阅管理查询优化器

查询优化器版本记录

下面汇总了每个版本中对查询优化器所做的更新。

版本 2:2020 年 3 月 1 日(最新)

  • 在索引选择中添加了优化。
  • 改进了某些情况下 REGEXP_CONTAINSLIKE 谓词的性能。
  • 改进了某些情况下 GROUP BY 下的扫描性能。

版本 1:2019 年 6 月 18 日

  • 包括许多基于规则的优化,例如谓词下推、限制下推、冗余联接和冗余表达式移除等。

  • 根据用户数据的统计信息来选择用于访问每个表的索引。

要根据您的情况管理优化器版本,请参阅管理查询优化器