gpt4 book ai didi

mysql - 为什么在查询中使用 IN(或 NOT IN)子句会使查询变得非常慢

转载 作者:行者123 更新时间:2023-11-29 12:25:25 25 4
gpt4 key购买 nike

我有一个疑问:

SELECT DISTINCT field1 FROM table1 WHERE field2 = something

(table1包含100万条记录,执行时间:0.106秒,返回:20条记录)

另一个查询

SELECT DISTINCT similarField1 FROM table2 WHERE similarField2 = somethingElse

(table2包含50万条记录,执行时间:0.078秒,返回:20条记录)

现在,如果我通过组合以上两者来运行查询:

SELECT DISTINCT field1 FROM table1 WHERE field2 = something AND field1 NOT IN (SELECT DISTINCT similarField1 FROM table2 WHERE similarField2 = somethingElse)

即使运行 10 分钟也没有给出结果。为什么它变得非常慢,以及可能的解决方案是什么。

编辑:我正在将 MySQL 与 dbvisualizer 6.5 一起使用

最佳答案

您不需要在子查询上使用DISTINCT。尝试使用 NOT EXISTS 这在 SQL-Server 中可能更有效:

SELECT DISTINCT field1 
FROM table1
WHERE field2 = @something
AND NOT EXISTS
(
SELECT 1 FROM table2
WHERE table2.similarfield1 = table1.field2
AND table2.similarfield2 = @somethingelse
)

编辑:由于您已经更新了标签,我不确定这在 MySql 中是否更有效。但是,无论如何,我更喜欢NOT EXISTS,因为它也works with NULL values (如果您使用IS NULL)并且更易于阅读和维护。

关于mysql - 为什么在查询中使用 IN(或 NOT IN)子句会使查询变得非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28407296/

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