未使用Snowflake中的搜索优化服务

问题描述 投票:0回答:2

我对 Snowflake 上的搜索优化服务有疑问:

我的数据库中有两个表 Store_sales 和 Customers,并且都启用了搜索优化服务,我有一个查询,它通过连接客户数据来过滤 store_sales.date 列中的日期列,如下所示:

select ss.SS_SOLD_DATE_SK, ss.SS_ITEM_SK, c.C_FIRST_NAME from STORE_SALES ss
join SS_CUSTOMER c 
on ss.SS_CUSTOMER_SK = c.C_CUSTOMER_SK  
where ss.SS_SOLD_DATE_SK = 2451148;

在执行计划中,我看到在扫描 STORE_SALES 表时使用搜索优化服务,而在 SS_CUSTOMER 表上未使用搜索优化服务,因为此全表扫描查询正在减慢,类似地,如果我对客户有点查找过滤器并查询 STORE_SALES 搜索未使用 STORE_SALES 优化。如何使用两个表都ON的搜索优化服务在两个表上使用?

以下是执行计划:

sql snowflake-cloud-data-platform data-warehouse
2个回答
1
投票

搜索优化如何影响加入

搜索优化服务不会直接提高连接的性能。但是,如果表启用了搜索优化并且谓词是选择性的,则它可以提高在连接之前从任一表中过滤行的性能。

两个表都不需要启用搜索优化。 使用搜索优化的决定是针对每个表独立做出的。

以上摘自文档,我在其中添加了自己的粗体

因此,查询优化器/规划器似乎已决定在此实例中的客户表不需要 SO。不幸的是,我没有看到任何关于如何(或是否)可以强制它使用 SO 的信息,也没有看到关于“如何”决定是否使用 SO 的信息。我已阅读有关查询谓词中不同值数量很大的指南:通过查询过滤操作访问的至少一列至少有 100k-200k 个不同值。


0
投票

搜索优化服务最佳实践

- 解释原因。 TL;DR - SOS 构建一个

Bloom Filter

,它使用统计技术来确定给定的键值(例如 DATE_KEY = 827529)是否在给定的微分区中。如果它确定该值绝对不在 MP 中,则可以跳过。但是,如果该值可能有很多 MP - Snowflake 将放弃搜索优化,转而采用全表扫描,因为这可能会更快。

© www.soinside.com 2019 - 2024. All rights reserved.