mssql 数据库“查询处理器用尽了内部资源,无法生成查询计划。”问题的处理

Posted liuxiaoji

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mssql 数据库“查询处理器用尽了内部资源,无法生成查询计划。”问题的处理相关的知识,希望对你有一定的参考价值。

在项目中动态拼接sql语句,使用union all连接结果集,每个查询语句都使用了in(几百个数值)。语句如:

SELECT AA FROM T1 WHERE aa IN(1,2,3,4..............................)
UNION ALL
SELECT AA FROM T2 WHERE aa IN(1,2,3,4..............................)

当in和union all 很多时执行就会发生异常

”查询处理器用尽了内部资源,无法生成查询计划。这种情况很少出现,只有在查询极其复杂或引用了大量表或分区时才会出现。请简化查询。如果您认为该消息的出现纯属错误,请与客户支持服务部门联系,了解详细信息。“

解决方法:

使用临时表把in语句改成EXISTS语句

CREATE TABLE #temp(id nvarchar(50))
INSERT INTO #temp(id) select 1  union select 2 union select 3 union select 4union select 5

SELECT AA FROM T1 WHERE EXISTS (SELECT 0 FROM #temp WHERE id=T1.aa)
UNION ALL
SELECT AA FROM T2 WHERE EXISTS (SELECT 0 FROM #temp WHERE id=T1.aa)

DROP TABLE #temp;

性能改善:

修改前执行57秒报错,修改后14秒出结果,效果还是很明显的.

以上是关于mssql 数据库“查询处理器用尽了内部资源,无法生成查询计划。”问题的处理的主要内容,如果未能解决你的问题,请参考以下文章

PHP连接MSSQL数据库的方法,PHPWAMP如何连接MSSQL数据库(极度详细)

MSSQL数据导出到MYSQL

php+mssql 和 php+mysql 优点缺点

MSSQL DBcheck

Mssql 2012 与 PHP & Mysql 到 Mssql 迁移

网络安全从入门到精通 (第五章-3) MSSQL反弹注入