Spanner 查询优化器版本 (original) (raw)

本页面介绍了各种 Spanner 查询优化器版本,并提供了相关历史记录。当前默认版本为 8。 如需详细了解查询优化器,请参阅查询优化器概览

Spanner 会以新查询优化器版本的形式发布查询优化器更新。默认情况下,每个数据库在该版本发布后的 30 天内开始使用最新版本的优化器。

您可以管理 GoogleSQL 方言数据库和 PostgreSQL 方言数据库的查询所使用的查询优化器版本。在提交到最新版本之前,您可以比较旧版本与最新版本之间的性能配置文件。如需了解详情,请参阅管理查询优化器

查询优化器版本记录

下面总结了在每个版本中对查询优化器进行的更新。

版本 8:2024 年 10 月 28 日(默认和最新)

版本 7:2024 年 5 月 22 日

版本 6:2023 年 9 月 11 日

版本 5:2022 年 7 月 15 日

版本 4:2022 年 3 月 1 日

GoogleSQL

SELECT ...  
FROM (...)  
JOIN@{join_method=hash_join, hash_join_execution=one_pass} (...)  

PostgreSQL

SELECT ...  
FROM (...)  
JOIN/*@ join_method=hash_join, hash_join_execution=one_pass */ (...)  

哈希联接的 build 端输入很大时,新模式会很有用。如果您在查询执行情况分析中观察到以下情况,则一次通过哈希联接的性能可能会更好:

版本 3:2021 年 8 月 1 日

GoogleSQL

@{join_method=merge_join}  
SELECT ...  

PostgreSQL

/*@ join_method=merge_join */  
SELECT ...  

联接提示:

GoogleSQL

SELECT ...  
FROM (...)  
JOIN@{join_method=merge_join} (...)  

PostgreSQL

SELECT ...  
FROM (...)  
JOIN/*@ join_method=merge_join */ (...)  

GoogleSQL

SELECT ...  
FROM (...)  
JOIN@{join_method=push_broadcast_hash_join} (...)  

PostgreSQL

SELECT ...  
FROM (...)  
JOIN/*@ join_method=push_broadcast_hash_join} */ (...)  

GoogleSQL

CREATE TABLE myTable(  
  a INT64,  
  b INT64,  
  c INT64,  
  d INT64)  
PRIMARY KEY (a, b, c);  

PostgreSQL

CREATE TABLE myTable(  
  a bigint,  
  b bigint,  
  c bigint,  
  d bigint,  
  PRIMARY KEY(a, b, c)  
);  

在此更改之前,以下查询将加载 c 列,即使查询不需要该列也不例外。

SELECT a, b  
FROM myTable  
GROUP BY a, b  

GoogleSQL

SELECT a2.*  
FROM Albums@{FORCE_INDEX=_BASE_TABLE} a1  
JOIN Albums@{FORCE_INDEX=_BASE_TABLE} a2 USING(SingerId)  
ORDER BY a1.AlbumId  
LIMIT 2;  

PostgreSQL

SELECT a2.*  
FROM albums/*@ force_index=_base_table */ a1  
JOIN albums/*@ force_index=_base_table */ a2 USING(singerid)  
ORDER BY a1.albumid  
LIMIT 2;  
SELECT  
  t.ConcertDate,  
  (  
    SELECT COUNT(*) FROM UNNEST(t.TicketPrices) p WHERE p > 10  
  ) AS expensive_tickets,  
  u.VenueName  
FROM Concerts t  
JOIN Venues u ON t.VenueId = u.VenueId  
ORDER BY expensive_tickets  
LIMIT 2;  

版本 2:2020 年 3 月 1 日

版本 1:2019 年 6 月 18 日

后续步骤