mysql - PHP 批量插入的時(shí)候 判斷數(shù)據(jù)表里面是否重復(fù)怎么優(yōu)化
問(wèn)題描述
場(chǎng)景:從第三方接口獲取到數(shù)據(jù) 比如 獲取到了 500 條,然后批量插入到表,但是要保證唯一。代碼如果是這樣的(name 字段有索引的情況下怎么才能最大化的優(yōu)化),這樣的結(jié)果是有500次的I/O 這個(gè)邏輯怎么優(yōu)化最佳呢;這里還有個(gè)場(chǎng)景如果當(dāng)這 500條插入成功后馬上進(jìn)行二次查詢第三方接口然后再批量插入,主要是考慮到第二種情況:
$datas = [];$Apps = new Apps();foreach ($lists as $k=>$v){ $name = $v[’name’]; $res = $Apps->where([’name’ => $name])->field(’name’)->find(); //如果沒(méi)有記錄 if (empty($res)){$datas[] = [’name’ => $name]; }}if (empty($datas)){ //批量插入 $Apps->saveAll($datas);}
問(wèn)題解答
回答1:保證唯一放在數(shù)據(jù)庫(kù)那邊處理,設(shè)置個(gè)unique就好了吧。這個(gè)不需要PHP來(lái)處理。
回答2:設(shè)置聯(lián)合主鍵
回答3:不能重復(fù)的字段加唯一索引吧
回答4:首先對(duì)該字段加唯一索引,然后SQL改成這樣,?INSERT INTO xx (yy)VALUES(?) ON DUPLICATE KEY UPDATE yy=?但唯一鍵出現(xiàn)重復(fù)時(shí)更新字段,也可以忽略重復(fù),對(duì)重復(fù)的行不做修改INSERT IGNORE INTO
相關(guān)文章:
1. javascript - 回調(diào)函數(shù)和閉包的關(guān)系2. javascript - 在top.jsp點(diǎn)擊退出按鈕后,right.jsp進(jìn)行頁(yè)面跳轉(zhuǎn),跳轉(zhuǎn)到login.jsp3. android - 哪位大神知道java后臺(tái)的api接口的對(duì)象傳到前端后輸入日期報(bào)錯(cuò),是什么情況?求大神指點(diǎn)4. mac連接阿里云docker集群,已經(jīng)卡了2天了,求問(wèn)?5. javascript - 下面的這段算法代碼求解釋6. css3 - 在sublime text里, 如何讓emmet生成的帶前綴css屬性垂直對(duì)齊?7. javascript - js 有什么優(yōu)雅的辦法實(shí)現(xiàn)在同時(shí)打開(kāi)的兩個(gè)標(biāo)簽頁(yè)間相互通信?8. java - spring-data Jpa 不需要執(zhí)行save 語(yǔ)句,Set字段就可以自動(dòng)執(zhí)行保存的方法?求解9. [前端求職必看]前端開(kāi)發(fā)面試題與答案精選_擴(kuò)展問(wèn)題10. 想找個(gè)php大神仿個(gè)網(wǎng)站。
