検索

ホームページ  >  に質問  >  本文

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);
}
怪我咯怪我咯2867日前708

全員に返信(4)返信します

  • PHPz

    PHPz2017-04-17 16:53:55

    データベース内で排他的に処理されることを確認し、一意として設定するだけです。
    これを処理するために PHP は必要ありません。

    返事
    0
  • 迷茫

    迷茫2017-04-17 16:53:55

    ジョイント主キーを設定します

    返事
    0
  • PHP中文网

    PHP中文网2017-04-17 16:53:55

    重複できないフィールドに一意のインデックスを追加します

    返事
    0
  • 迷茫

    迷茫2017-04-17 16:53:55

    まずフィールドに一意のインデックスを追加し、次に SQL を次のように変更します。 INSERT INTO xx (yy)VALUES(?) ON DUPLICATE KEY UPDATE yy=?
    しかし、一意のキーが繰り返されると、フィールドは更新され、繰り返しも無視できます。重複する行は変更しないでください。 INSERT IGNORE INTO

    返事
    0
  • キャンセル返事