我有一个表值函数,它返回四行:
SELECT *
FROM dbo.GetStuff('0D182B8B-7A80-4D45-8900-23FA01FCFE5A')
ORDER BY TurboEncabulatorID DESC
然后快速返回(< 1s):
TurboEncabulatorID Trunion Casing StatorSlots
------------------ ------- ------ -----------
4 G Red 19
3 F Pink 24
2 H Maroon 17
1 G Purple 32
但我只是想要"最后"行(即具有最高TurboEncabulatorID
的行)。所以我添加了TOP
:
SELECT TOP 1 *
FROM dbo.GetStuff('0D182B8B-7A80-4D45-8900-23FA01FCFE5A')
ORDER BY TurboEncabulatorID DESC
此查询需要大约40秒才能运行,其中包含巨大的I / O数量,以及更糟糕的查询计划。
显然这是优化器的一个问题 - 但我该如何解决呢?
答案 0 :(得分:0)
我提出的解决方法,显然不是一个答案,是试图混淆优化器:
换句话说:
WITH optimizerWorkaround AS
(
SELECT TOP 1 PERCENT *
FROM dbo.GetStuff('0D182B8B-7A80-4D45-8900-23FA01FCFE5A')
ORDER BY TurboEncabulatorID DESC
)
SELECT TOP 1 *
FROM optimizerWorkaround
ORDER BY TurboEncabulatorID DESC
这很快就会恢复,好像我一开始没有TOP。