使用SQL Server ORDER BY子句的巨大性能成本?

JoJ*_*oJo 0 sql sql-server

如果我们在最后有一个ORDER BY子句,是什么导致查询需要更长的时间?

如果我在没有Order BY的情况下运行查询,它需要一瞬间,但抛出ORDER BY并且它的MINUTES !!

有这个已知的原因吗?

SELECT top 100 a.UniqueID
    ,a.SomeID
    ,a.ContentID
    ,SortOrder
    ,b.ValueOfMine
INTO #ContentHistory
FROM widgetHistory.dbo.CustomerProductContent a WITH (NOLOCK)
LEFT JOIN widgetHistory.dbo.ProductContent b WITH (NOLOCK) ON a.ContentID = b.ContentID
LEFT JOIN widgetHistory.dbo.SomeThings k WITH (NOLOCK) ON a.SomeID = k.SomeID
LEFT JOIN widgetHistory.dbo.SubscriptionContents c WITH (NOLOCK) ON b.ContentID = c.ContentID
    AND c.SubscriptionID = k.SubscriptionID
WHERE c.ContentStatus = 'GO'
ORDER BY UniqueID
Run Code Online (Sandbox Code Playgroud)

它甚至不会完成所以我无法查看执行计划..

sta*_*ius 7

如果没有ORDER BY,SQL Server会在计算完成后立即为您计算前100行.

使用ORDER BY,SQL Server必须计算所有行,对它们进行排序,然后它才能为您提供所要求的100行.