我有下面的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子句中的所有记录插入临时表,并按如下所述使用它。但这个问题是否与此相关?
答案 0 :(得分:1)
您收到此错误是因为您的IN
子句太大了。根据{{3}}:
包含极大数量的值(数千) IN子句可以消耗资源并返回错误8623或8632. To 解决此问题,将项目存储在表格的IN列表中。
正如评论中所建议的那样,你应该将这些id存储在一个(临时)表中,然后加入它们。