gpt4 book ai didi

MySQL "INSERT INTO SELECT NOT EXISTS"效率

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

下面的代码让我头疼不已,它有效;但只需要 16k 行就需要 30 分钟以上;最终数据库将包含 1-5M 行。

所以我希望让事情变得更有效率

INSERT INTO r (aKey, bKey, c, d, e, fKey, g, h, i, j, k, l, mKey, nKey, o, pKey, qKey, r, sKey)
SELECT aKey, bKey, c, d, e, fKey, g, h, i, j, k, l, mKey, nKey, o, pKey, qKey, r, sKey
FROM t2
WHERE NOT EXISTS
(
SELECT i,g
FROM r
WHERE t2.i = r.i AND t2.g = r.g
);

i 和 g 的字段是唯一的(当前未在数据库中指定 - 它们应该是吗?但是是一个要求)

任何带有 Key 的内容都是引用另一个表的外键

在上述语句之后,我将循环遍历每个非唯一的内容,并在不同时进行更新。

UPDATE r
INNER JOIN t2 ON t2.i = r.i
SET r.d=t2.d;

我调查过:

INSERT ... ON DUPLICATE KEY UPDATE

但我始终没能让它发挥作用;因为我发现的所有示例都没有处理插入选择

任何改进 SQL 的建议都会非常有帮助。

最佳答案

结论是:由于请求的大小,最好回到基础知识并“将唯一数据库字段设置为 UNIQUE”,然后执行 INSERT IGNORE

代码如下:(包括Python变量插入)

INSERT IGNORE INTO """ + tblName + """ (""" + dupeString + """)
SELECT """ + dupeString + """
FROM t2
ON DUPLICATE KEY UPDATE """ + updateString + """;

从 30-40m 查询下降到...不到 3 秒。

关于MySQL "INSERT INTO SELECT NOT EXISTS"效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48286055/

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