我有一个简单的导入程序,它遍历一个相当大的csv的每一行并将其导入数据库。
我的问题是:我应该调用另一个方法来插入每个对象(生成DO并告诉它的映射器要插入),还是应该在导入方法中对插入过程进行硬编码,复制代码?
我知道要做的优雅事情就是调用第二种方法,但我一直听到功能调用很昂贵。
您怎么看?
答案 0 :(得分:4)
许多RDBMS品牌都支持执行批量导入的特殊命令。例如:
LOAD DATA INFILE
COPY
BULK INSERT
SQL*Loader
使用这些命令比从CSV数据源一次插入一行更受欢迎,因为批量加载命令的运行速度通常至少快一个数量级。
答案 1 :(得分:1)
我认为这不重要。考虑批量插入。至少要确保你正在使用一个事务,并考虑在插入之前禁用索引。
答案 2 :(得分:1)
这应该没关系,因为插入的时间可能比php代码长几个数量级。
正如其他人所说,批量插入将为您带来更多好处。 这些行级优化只会让你对优秀的更高级别优化视而不见。
如果您不确定,可以通过两种方式进行简单的计时,不需要花费超过几分钟的时间来查找。
如果一次性达到某些内存/时间/ ....限制,请考虑将这两种方法结合起来进行批量插入。