带IN条件的LEFT JOIN会引发查询处理器错误

时间:2016-03-01 14:50:58

标签: sql sql-server tsql

我有下面的sql查询无法执行错误"查询处理器耗尽了内部资源,无法生成查询计划。这是一种罕见的事件,仅适用于引用大量表或分区的极其复杂的查询或查询。请简化查询。"

SELECT merchant.id,merchant.name,order.id,order.name,order.shipaddress 
FROM     orders AS order
LEFT JOIN 
merchants AS merchant 
ON
order.merchantid = merchant.id
WHERE
order.id IN (12 , 50 , 60 , 48,.. ...(upto 38000 id's)) 
ORDER BY order.id

如果我删除where条件,则相同的查询以左连接条件或内连接conidtion运行(并返回65条记录)。

它也适用于包含条件的地方,但仅适用于内连接。最初我认为WHERE条件中的IN子句存在问题,但现在我对LEFT导致问题的方式感到有些困惑。

任何帮助我如何解决这个问题。一种解决方法是将WHERE子句中的所有记录插入临时表,并按如下所述使用它。但这个问题是否与此相关?

The query processor ran out of internal resources exception

1 个答案:

答案 0 :(得分:1)

您收到此错误是因为您的IN子句太大了。根据{{​​3}}:

  

包含极大数量的值(数千)   IN子句可以消耗资源并返回错误8623或8632. To   解决此问题,将项目存储在表格的IN列表中。

正如评论中所建议的那样,你应该将这些id存储在一个(临时)表中,然后加入它们。