gpt4 book ai didi

mysql - 使用 WHERE IN 子句的 SQL 更新查询可能包含大量不匹配的行 ID 是否会成为性能问题?

转载 作者:行者123 更新时间:2023-11-29 07:01:41 24 4
gpt4 key购买 nike

我在 XML 文件中有一个 inactive_products 列表。我需要根据非事件产品列表更新数据库中产品的“事件”( bool )字段。但是,非事件产品列表包含很多甚至不在我的数据库中的产品。使用 WHERE IN 子句对整个非事件产品列表运行更新语句是否会更快,或者我应该先将非事件产品列表与事件产品的 CSV 文件进行比较,以获得相关的非事件产品,然后改为使用所有这些筛选列表运行 UPDATE 语句?

我最初的想法是,我应该让 SQL 自行处理并处理未过滤的列表,但技术上正确的答案是什么?

最佳答案

解决 IN 运算符的长值列表的一种方法是改用 JOIN 到临时表。当 Oracle 不支持超过 1000 个 IN 值时,这是解决方法。

如果你有这样的疑问

SELECT * FROM mytable WHERE column IN (value1, value2, ..., valueN)

然后将其替换为:

CREATE TEMPORARY TABLE temp_table AS
SELECT column FROM <source that contains value1, value2, ..., valueN>

SELECT * FROM mytable JOIN temp_table ON (mytable.column = temp_table.column)

渐近地,这应该比使用 IN 表现得更好(至少在 Oracle 中)。

关于mysql - 使用 WHERE IN 子句的 SQL 更新查询可能包含大量不匹配的行 ID 是否会成为性能问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9866788/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com