如果我要处理非常大量的数据(需要SELECT)然后插入另一个表(INSERT),那么这是一个更好的主意
INSERT ... SELECT
语句,或可能是存储过程SELECT
创建INSERT INTO table () VALUES (), (), ...
INSERT ... SELECT
会挂起服务器吗?或者也许是内存不足?假设SELECT结果在一个大数据集中说100万条记录(但是数据很少,~2 +列.ID列所以它是INT)
更新:应用程序正在使用NodeJS
答案 0 :(得分:1)
从性能角度来看,保持数据库中的所有数据处理通常是最佳解决方案。
处理一百万行应该没问题。当然,还有其他注意事项:例如索引和触发器。此外,如果插入阻止其他查询,那么这是另一个问题。但总的来说,select
的一百万行应该没问题。
答案 1 :(得分:1)
我认为这个答案是戈登回应的附录。在第一个选项中,
长
INSERT ... SELECT
语句,或可能是存储过程
整个操作都在数据库中进行,因此唯一的网络开销是发送查询本身,这可以忽略不计。但是,在第二个选项中,
应用程序级
批次的第一个流程SELECT
创建INSERT INTO table () VALUES (), (), ...
您首先检索所有要插入应用程序层的数据,然后将所有数据发送回数据库。这里的网络开销远大于第一个选项。此外,应用程序层(例如Java)不擅长做数据库事务(但MySQL是)。处理应用层中的数据也可能容易出错。
如果可能的话,我会选择第一个选项。