加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 由于WHERE子句中有超过100,000个条目,因此SQL Ser

发布时间:2020-12-12 06:21:39 所属栏目:MsSql教程 来源:网络整理
导读:我的问题(或至少是错误信息)与 query processor ran out of internal resources – extremely long sql query非常相似. 我的客户正在使用SQL select-query,其中包含where子句,其中包含100,000个条目. 查询失败,错误8632和错误消息 Internal error: An express
我的问题(或至少是错误信息)与 query processor ran out of internal resources – extremely long sql query非常相似.

我的客户正在使用SQL select-query,其中包含where子句,其中包含100,000个条目.

查询失败,错误8632和错误消息

Internal error: An expression services limit has been reached. Please look for potentially complex expressions in your query,and try to simplify them.)

我发现这个错误消息被抛出非常奇怪,完全是100,000个条目,所以我想知道这是否是一个可配置的值.是这种情况,如果是,我怎样才能将此值增加到更高的值?

在MSDN,有重新重写查询的建议,但我想避免这种情况.

同时我发现我正在谈论的条目列表包含自然数,其中一些似乎是顺序的(类似于(1,2,3,6,7,8,9,10,12,13,15,16,17,18,19,20).

这使得SQL where子句类似于:

where entry in (1,20)

我可以将其转换为:

where (entry between 1 and 3) OR
      (entry between 6 and 10) OR
      (entry between 12 and 13) OR
      (entry between 15 and 20)

可以通过以下方式缩短:

where entry in (1,...,20)

……或类似的东西? (我知道这是一个很长的镜头,但它会使软件更新更容易,更可读)

为了您的信息:where子句中的数据是计算的结果,在另一个表上完成:首先在开始时读取和过滤该表的条目,然后完成一些额外的处理(这是不可能的SQL),额外处理的结果是更多过滤,其结果用于where子句.由于无法在SQL中编写完整的过滤,因此使用了上述方法.显然,where子句的内容可能会在每次处理时发生变化,因此需要动态解决方案.

解决方法

要搜索超过100,000个值,请将它们放在临时表中,每个值要搜索一行.然后,将您的查询加入该临时表进行过滤.

超过100,000个值的东西不是参数 – 它是一个表.考虑Swart’s Ten Percent Rule,而不是考虑提高限制,如果你接近SQL Server限制的10%,你可能会遇到不好的时间.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读