我正在从表值函数中选择一些行,但通过将 SELECT TOP 放入查询中发现了莫名其妙的巨大性能差异。
SELECT col1, col2, col3 etc
FROM dbo.some_table_function
WHERE col1 = @parameter
--ORDER BY col1
需要 5 或 6 分钟以上才能完成。
然而
SELECT TOP 6000 col1, col2, col3 etc
FROM dbo.some_table_function
WHERE col1 = @parameter
--ORDER BY col1
在大约 4 或 5 秒内完成。
如果返回的数据集很大,这不会让我感到惊讶,但所涉及的特定查询会返回 200,000 行中的约 5000 行。
因此,在这两种情况下,都会处理整个表,因为 SQL Server 会继续搜索它永远不会到达的 6000 行。那为什么会有巨大的差异呢?这是否与 SQL Server 在预期结果集大小时分配空间的方式有关(TOP 6000 从而使其要求较低,更容易在内存中分配)?有没有其他人目睹过这样的事情?
谢谢