我们已经安装了一些数据库监控软件。其中一个sql
语句使我们的系统停止运行如下:
update StockItems set WebTransfer='N'
where stockcode in ('1001','1002','1003',......)
上面的 where "......"
代表2496
个其他股票代码!即总共列出了2499
股票代码。
这是我们的软件供应商给我们的解决方案。
我感到惊讶的是它导致SQL
引擎出血,在我看来它应该加入另一个表来获取要更新的代码列表,或者只是继续更新所有他们(我认为在这种情况下会没问题)。
虽然我知道我从来没有写过这样的SQL,而且我从来没有见过类似的东西,但我不确定哪种约定/标准会支持我的观点#39 ;不是一个好的解决方案。
任何人都可以提供有关返回供应商的建议吗?
答案 0 :(得分:4)
maximum size is about 10k values in the IN clause.。您可以更好地使用一些临时表,然后使用JOINS来获取数据
您还可以检查报告的类似问题here。
答案 1 :(得分:0)
在我看来最好使用不同的表来存储所有ID并使用JOINS来更新表。
或者您可以像这样使用INNER QUERY
update StockItems set WebTransfer='N'
where stockcode in (Select * from Temp where ID>=1001 && ID<=END);