Snowflake cloud data platform snowflake TOP/Limit/Fetch找到足够的行后是否停止处理?

Snowflake cloud data platform snowflake TOP/Limit/Fetch找到足够的行后是否停止处理?,snowflake-cloud-data-platform,snowflake-schema,Snowflake Cloud Data Platform,Snowflake Schema,在查询中使用Snowflake TOP子句时,SQL Server引擎是否会在满足需要返回的TOP X后停止搜索行?我认为这取决于查询的其余部分。例如,如果您使用TOP 10,但不提供订单,则“是”,它将在返回10条记录后立即停止,但您的结果是不确定的 如果您使用的是order by,则必须先执行整个查询,然后才能返回前10个结果,但您的结果将是确定性的 这里是一个真实的例子。如果我在SAMPLE\u DATA.TPCH\u SF10000.CUSTOMER表上运行一个select,并使用lim

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

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

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

这里是一个真实的例子。如果我在
SAMPLE\u DATA.TPCH\u SF10000.CUSTOMER
表上运行一个select,并使用
limit 10
,它将在1.8秒内返回(无缓存)。此表中有150000000行。如果我检查查询计划,它只扫描了表的一小部分,6971个分区中的1个:


您可以看到,当10条记录从初始表扫描流式返回时,它将返回,因为它无需再做任何事情。

根据我的测试和理解,它不会停止。您通常可以看到执行计划中的最后一步是“限制”步骤。您还可以通过查看执行计划来了解发生了什么。在完全处理之后,您通常会看到限制(或其他限制)。此外,如果您接受一个运行时间为20秒而没有限制(或类似限制)的查询,并添加该限制,您通常不会看到执行时间上的任何差异(但要注意获取时间)。我通常在UI中运行查询性能测试,以避免客户端工具出现问题,这些问题可能会由于对查询和/或使用游标的限制而误导您。

我没有应用order by,但我发现它仍然需要与没有最上面一条相同的执行时间。完整的SQL语句是什么?我对orderby的解释只是一个例子,说明它不会突然停止。