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

标签 sql sql-server t-sql

我有以下 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 子句中的所有记录插入临时表并按如下所述使用它。但这个问题与同样的问题有关吗?

The query processor ran out of internal resources exception

最佳答案

您收到此错误是因为您的 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/

相关文章:

mysql - 索引是否与 View 一起使用?

mysql - 默认值在 phpmyadmin/mysql 数据库中不起作用

sql - 即使有索引,对数百万条记录的 SUM 查询也很慢,我该如何优化?

sql-server - col1 的计数超过 col2 的 order

sql - PIVOT SQL Server 协助

sql - MySQL 重复——如何指定两条记录实际上不重复?

sql - 获取SQL Server 2005、2008服务器中某个时间段的中值

URL 的 MySQL 数据类型

ASP.NET 权限框架?

sql - 如何使用 Visual Studio 2008 Server Explorer 将主键索引重置为 1?