下面的一些代码让我头疼不已,它有效;但是只需要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& amp;的领域g是uniques(当前没有在DB中指定 - 它们应该是?但是要求)
任何带有Key的东西都是引用另一个表的外键
在上面的语句之后,我循环遍历每个唯一的唯一,并更新它是否不同。
UPDATE r
INNER JOIN t2 ON t2.i = r.i
SET r.d=t2.d;
我已经调查过:
INSERT ... ON DUPLICATE KEY UPDATE
但是我从未能够让它上班;因为我发现的所有例子都没有处理插入选择
任何改进SQL的建议都会非常有用。
答案 0 :(得分:0)
结论是:由于请求的大小最好回到基础并“将唯一数据库字段设置为UNIQUE”然后执行INSERT IGNORE
以下代码:(包括python变量插入)
INSERT IGNORE INTO """ + tblName + """ (""" + dupeString + """)
SELECT """ + dupeString + """
FROM t2
ON DUPLICATE KEY UPDATE """ + updateString + """;
从30-40米的查询下降到......不到3秒。