mysql - PHP 批量插入的时候 判断数据表里面是否重复怎么优化
问题描述
场景:从第三方接口获取到数据 比如 获取到了 500 条,然后批量插入到表,但是要保证唯一。代码如果是这样的(name 字段有索引的情况下怎么才能最大化的优化),这样的结果是有500次的I/O 这个逻辑怎么优化最佳呢;这里还有个场景如果当这 500条插入成功后马上进行二次查询第三方接口然后再批量插入,主要是考虑到第二种情况:
$datas = [];$Apps = new Apps();foreach ($lists as $k=>$v){ $name = $v[’name’]; $res = $Apps->where([’name’ => $name])->field(’name’)->find(); //如果没有记录 if (empty($res)){$datas[] = [’name’ => $name]; }}if (empty($datas)){ //批量插入 $Apps->saveAll($datas);}
问题解答
回答1:保证唯一放在数据库那边处理,设置个unique就好了吧。这个不需要PHP来处理。
回答2:设置联合主键
回答3:不能重复的字段加唯一索引吧
回答4:首先对该字段加唯一索引,然后SQL改成这样, INSERT INTO xx (yy)VALUES(?) ON DUPLICATE KEY UPDATE yy=?但唯一键出现重复时更新字段,也可以忽略重复,对重复的行不做修改INSERT IGNORE INTO
相关文章:
1. python爬虫 - scrapy使用redis的时候,redis需要进行一些设置吗?2. angular.js - 如何控制ngrepeat输出的个数3. node.js - 问个问题 Uncaught (in promise)4. mysql5.7就没有官方性质的详细配置文件吗?求大神告知5. 网页爬虫 - python requests爬虫,如何post payload6. CSS3 flex 如何让高度不等的同排等高?7. python3.x - python3.5.2安装时make报错求助8. html - 这种错位的时间轴怎么布局,然后用css实现?9. python 读取csv文件可以读取但内容错误,但单独用excel打开正常,如何解决?10. mysql_replication - mysql读写分离时如果单台写库也无法满足性能怎么解决

网公网安备