插入的问题
php操作大批量数据的时候,我想到的解决方法如下
方法一:foreach循环遍历中构造sql语句然后插入数据库
insert into xxx values (xxx,xxx,xxx)
方法二:foreach循环遍历构造sql语句,最后一次性插入
insert into xxx(field1,field2,field3)values(xxx1,xxx2,xxx3),(xxx1,xxx2,xxx3)
以上只是插入,如果要在插入的时候先判断插入的数据是否存在数据库中,那每一次插入之前都要进行一次select的操作,这样效率不高?如何优化蛤?
更新的问题
其实类似于上面的插入,update之前先select,如果存在就update,不存在就insert,这样sql语句依然很多,如何优化呢?
1- Mysql还有一种语法是 REPLACE INTO,存在就更新,否则插入
2- Mysql还有一种语法是 INSERT INTO ... ON DUPLICATE KEY UPDATE,存在唯一键键冲突就更新
3- 实际开发中大批量数据插入是很罕见的,至少1000条以下肯定不算大批量,所以如果你是想省事的话,通常你会验证一时偷懒节约了4小时所引起的麻烦够你折腾8小时这个预言。
通常大批量数据插入发生在数据从旧数据库中导入,但是这种导入通常只有一次,所以怎么认真对待都不为过,其它的比如从上传的csv文件中导入数据需要看具体的业务逻辑,比较常见的是使用try/catch进行插入,失败的数据显示出来,让用户确认覆盖,然后再update。