我想用可能重叠的数据填充表格。我在代码中这样做了几次。所以,第一次是
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将代码更改为一次插入,但是需要进行大量的重新设计,所以我想知道我现在正在接受多少性能损失
谢谢!
答案 0 :(得分:1)
工会的成本可能更低。但与数据库一样,取决于。
为什么?
因为你现在正在做的是:
通过工会,您可以这样做:
即。您当前的查询扫描表B,C,D和表A两次加上三次单独查询的开销。联合查询将扫描表B,C,D,并对行进行排序(以获取唯一值),然后将它们插入到表A中。乍一看似乎联合会更快,因为您减少了两次扫描并且只有一个插入(因此锁定较少)。
我所说的取决于是:
索引:正确索引,搜索可能比从B,C和D排序数据更快。
数据量:如果与运行数据库的硬件相比数据很少,那么这种讨论可能毫无意义。即优化不是瓶颈的零件是没有意义的。
答案 1 :(得分:0)
如果目标表中有合适的UNIQUE KEY约束,您可能还需要查看INSERT IGNORE ...
。
只是另一个想法......虽然不知道性能差异,可能取决于您的表结构,索引和数据。我会自己对不同方法进行基准测试并选择最合适的方法。