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處理Dict生成json2. mysql優化 - mysql 一張表如果不能確保字段列長度一致,是不是就不需要用到char。3. python中怎么對列表以區間進行統計?4. 大家都用什么工具管理mysql數據庫?5. python - 為什么match匹配出來的結果是<_sre.SRE_Match object; span=(0, 54), match=’’>6. android - 在win7配置 react native開發環境時,一直卡在這里,請問以下是哪里出錯了,謝謝!7. python - 請問這兩個地方是為什么呢?8. python - 用os.environ能獲取到的環境變量,在os.environ.getenv卻得不到,這是為什么?9. 請教一個mysql去重取最新記錄10. javascript - 按鈕鏈接到另一個網址 怎么通過百度統計計算按鈕的點擊數量
