mysql - PHP 批量插入的时候 判断数据表里面是否重复怎么优化
怪我咯
怪我咯 2017-04-17 16:51:55
0
4
662

场景:从第三方接口获取到数据 比如 获取到了 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);
}
怪我咯
怪我咯

走同样的路,发现不同的人生

모든 응답(4)
PHPzhong

데이터베이스에서만 처리되도록 하려면 고유하게 설정하면 됩니다.
이를 처리하는 데 PHP가 필요하지 않습니다.

迷茫

공동 기본 키 설정

洪涛

반복할 수 없는 필드에 고유 색인 추가

迷茫

먼저 필드에 고유 인덱스를 추가한 다음 SQL을 이렇게 변경합니다. INSERT INTO xx (yy)VALUES(?) ON DUPLICATE KEY UPDATE yy=?
그러나 고유 키가 반복되면 필드가 업데이트되며 반복도 무시할 수 있습니다. 중복 행을 수정하지 마세요. INSERT IGNORE INTO

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿