首页 > 解决方案 > 一旦找到足够的行,雪花 TOP/Limit/Fetch 是否会停止处理?

问题描述

当您在查询中使用 Snowflake TOP 子句时,SQL Server 引擎是否会在其足以满足需要返回的 TOP X 时停止搜索行?

标签: snowflake-cloud-data-platformsnowflake-schema

解决方案


我认为这取决于您查询的其余部分。例如,如果您使用TOP 10但不提供order bythen yes,则它会在返回 10 条记录后立即停止,但您的结果是不确定的。

如果您使用order by,则必须首先执行整个查询,然后才能返回前 10 个结果,但您的结果将是确定性的。

这是一个真实的例子。如果我SAMPLE_DATA.TPCH_SF10000.CUSTOMER使用 a 在表上运行选择,limit 10它将在 1.8 秒内返回(无缓存)。该表中有 1,500,000,000 行。如果我然后检查查询计划,它只扫描了表的一小部分,即 6,971 个分区中的 1 个:

在此处输入图像描述

您可以看到,当从初始表扫描中流回 10 条记录时,它将返回,因为它无需执行任何其他操作。


推荐阅读