【发布时间】:2023-03-14 01:58:01
【问题描述】:
问题:假设我们正在查看 100 亿行数值数据,其中 FROM 子句排除了 99% 的条目,您希望哪种方法执行得更好,为什么?
无论哪种方式我都可以争论,但话又说回来,我可能有 6 个月的 SQL 经验,但没有接受过正规的 Compsci 教育。问题是用 ANSI Snowflake SQL 格式化的。
方法一:对所有列进行采样(带条件)。
SELECT col1, col2, col3.... coln
FROM table1
WHERE cond1 and cond2 and cond3... condn
SAMPLE (1000000 rows)
方法 2: 仅样本 ID(带条件)然后加入。
SELECT *
FROM
(SELECT IDcol
FROM table1
WHERE cond1 and cond2 and cond3... condn
SAMPLE (1000000 rows)
) as t1sampled
INNER JOIN
(SELECT col1, col2, col3.... coln
FROM table1
) as t1
ON t1sampled.IDcol = t1.IDcol
【问题讨论】:
-
试用并报告。
-
实际上,Snowflake 可能会为每一个创建完全相同的配置文件,因此这实际上取决于数据以及分析器如何创建执行计划。顺便说一句 - 方法 3 可以利用 CTE,它还可以创建不同的执行计划并以不同的方式执行。
-
@GordonLinoff 报道。迈克,我包含了查询配置文件以揭开发生了什么的神秘面纱。
标签: sql database snowflake-cloud-data-platform