我有以下 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 条件,则相同的查询可以使用左连接条件或内连接条件运行(并返回 65 条记录)。
它在包含 where 条件的情况下也可以正常运行,但仅限于内部连接。最初我认为这是 WHERE 条件下 IN 子句的问题,但现在我有点困惑 LEFT 是如何导致问题的。
任何帮助我如何解决这个问题。一种解决方法是将 WHERE 子句中的所有记录插入临时表并按如下所述使用它。但这个问题与同样的问题有关吗?
最佳答案
您收到此错误是因为您的 IN
子句太大。根据documentation :
Including an extremely large number of values (many thousands) in an IN clause can consume resources and return errors 8623 or 8632. To work around this problem, store the items in the IN list in a table.
正如评论中所建议的,您确实应该将这些 id 存储在(临时)表中,然后加入它们。
关于sql - 带有 IN 条件的 LEFT JOIN 会引发查询处理器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35726030/