Snowflake cloud data platform snowflake TOP/Limit/Fetch找到足够的行后是否停止处理?
在查询中使用Snowflake TOP子句时,SQL Server引擎是否会在满足需要返回的TOP X后停止搜索行?我认为这取决于查询的其余部分。例如,如果您使用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
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的解释只是一个例子,说明它不会突然停止。