gpt4 book ai didi

mysql - 在 mysql 中,NOT EXISTS 函数的性能比 UNION 高得多吗?

转载 作者:行者123 更新时间:2023-11-29 00:53:51 26 4
gpt4 key购买 nike

我想用可能重叠的数据填充表格。我在代码中做了几次。所以,这是第一次

INSERT INTO A (SELECT * FROM B)

然后是第二次

INSERT INTO A
SELECT * FROM C
WHERE NOT EXISTS (SELECT * FROM A Where A.field = C.field)

重新插入总共进行了 3 次。我可以在 4 个子表上使用 UNION 将代码更改为仅一次插入,但这需要大量的重新设计,所以我想知道我现在收到了多少性能损失

谢谢!!

最佳答案

工会的成本可能更低。但与数据库一样,视情况而定

为什么?

因为你现在正在做的是:

  1. 扫描表B并插入到A中。
  2. 扫描表 C 并插入到 A(不存在的地方)。
  3. 扫描表 D 并插入到 A(不存在的地方)。

有了工会,你会这样做:

  1. 扫描表 B。
  2. 扫描表 C。
  3. 扫描表 D。
  4. 将唯一值插入表 A。

即您当前的查询扫描表 B、C、D 和表 A 两次,加上三个单独查询的开销。联合查询将扫描表 B、C、D,并对行进行排序(以获得唯一值),然后将它们插入表 A。乍一看,联合查询似乎更快,因为您少进行了两次扫描,并且只有一个插入(因此锁定更少)。

这取决于的意思是:

索引:正确索引,查找可能比从 B、C 和 D 排序数据更快。

数据量:如果与运行数据库的硬件相比,您的数据很少,那么此讨论可能毫无意义。 IE。优化不是瓶颈的部分没有意义。

关于mysql - 在 mysql 中,NOT EXISTS 函数的性能比 UNION 高得多吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7089529/

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