我尝试运行查询,但它返回的错误是没有足够的资源来处理它。
查询是:
SELECT ID,
ISNULL(LINK,'0'),
FLOOR(ISNULL(AMOUNTPAID,'0')),
CONVERT(VARCHAR(8), DATEPAID, 5),
PAYSOURCE
FROM finance
WHERE DATEADD(month,24,DATEPAID) > GETDATE()
AND ID IN (A LIST OF IDs)
第一个选择是大约140万个结果,ID列表大约有100.000个ID。
是否有其他方法可以构建此查询?
答案 0 :(得分:0)
我假设您使用的是100,000个IN
值的长列表并看到此错误
查询处理器耗尽了内部资源而无法使用 制定查询计划。这是一个罕见的事件,只有预期 非常复杂的查询或引用非常大的查询 表或分区的数量。请简化查询。如果你 相信您错误地收到了此消息,请联系客户 支持服务以获取更多信息。
根据this Connect item的建议,将Ids列表放入临时表或索引表值参数中。
答案 1 :(得分:0)
select ID,ISNULL(LINK,'0'),FLOOR(ISNULL(AMOUNTPAID,'0')),CONVERT(VARCHAR(8), DATEPAID, 5) ,PAYSOURCE
from dbo.finance f inner join listofid l on f.id=l.id
where DATEADD(month,24,DATEPAID) > GETDATE()
你还需要在DATEPAID.hope上创建非聚集索引.id是pk。 顺便说一下,id列表来自table / variable?
我认为查询会很快。你的意思是说还有另一个查询,你将id列表放在变量中。