我对 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的搜索优化服务在两个表上使用?
以下是执行计划:
搜索优化服务不会直接提高连接的性能。但是,如果表启用了搜索优化并且谓词是选择性的,则它可以提高在连接之前从任一表中过滤行的性能。
两个表都不需要启用搜索优化。 使用搜索优化的决定是针对每个表独立做出的。
以上摘自文档,我在其中添加了自己的粗体。
因此,查询优化器/规划器似乎已决定在此实例中的客户表不需要 SO。不幸的是,我没有看到任何关于如何(或是否)可以强制它使用 SO 的信息,也没有看到关于“如何”决定是否使用 SO 的信息。我已阅读有关查询谓词中不同值数量很大的指南:通过查询过滤操作访问的至少一列至少有 100k-200k 个不同值。