鍍金池/ 問答/人工智能  PHP  數(shù)據(jù)庫  網(wǎng)絡(luò)安全/ php sql update追加更新大量數(shù)據(jù)超時無響應(yīng) 怎么解決

php sql update追加更新大量數(shù)據(jù)超時無響應(yīng) 怎么解決

UPDATE `addon` SET `productsimages`= concat(productsimages,'##','BD-PT4878-1.jpg'),`jieshao`=concat(jieshao,'##','Immunohistochemical analysis of paraffin-embedded human-stomach-cancer tissue. 1,VIM PolBD-PClonal Antibody was diluted at 1:200(4°,overnight). 2, Sodium citrate pH 6.0 was used for antigen retrieval(>98°C,20min). 3,Secondary antibody was diluted at 1:200(room temperature, 30min) Negtive control was used by secondary antibody only.)') WHERE typeid='190' AND catalogno='BD-PT4878';

catalogno不是索引
執(zhí)行如上語句,一共1W多條,無響應(yīng),
分兩次,一次5000條也還是無響應(yīng),
試過組合數(shù)組,然后foreach執(zhí)行,無響應(yīng)。
該怎么辦呢 - -

回答
編輯回答
故人嘆

大量更新業(yè)務(wù)操作是在一定情況下偶發(fā)還是經(jīng)常操作的

如果是偶發(fā)建議停業(yè)務(wù)操作

如果是經(jīng)常操作考慮業(yè)務(wù)上是否可以做及時處理或分發(fā)消息異步處理

上面的直接操作沒有時間限定,你可以起一個進程,每隔一定時間處理一定的數(shù)量,比如1分鐘處理100個更新,然后sleep(10)迭代處理,

偽代碼

$limit = 0;
$offset = 100;
while(true) {
    $data = getLists($limit);
    // operate
    doit($data);
    sleep(10);
    // log
    $limit += $offset;
}
2018年3月24日 15:55
編輯回答
尐飯團

如果可以的話,寫一個腳本,然后每次更新N條,再加一個contab定時任務(wù)去循環(huán)執(zhí)行你的腳本,直到所有update結(jié)束。

2018年8月30日 13:58
編輯回答
蟲児飛

程序里調(diào)用這個函數(shù)set_time_limit(0);
之后還是會超時無響應(yīng),但此時是nginx的超時處理,實際上你的php程序仍然在運行的,你的數(shù)據(jù)該update還是會update,只是你不知道何時完成而已

2017年4月24日 21:11
編輯回答
蔚藍色

這個好解決,還是索引效率的問題。

UPDATE `addon` SET `productsimages`= concat(productsimages,'##','BD-PT4878-1.jpg'),`jieshao`=concat(jieshao,'##','Immunohistochemical analysis of paraffin-embedded human-stomach-cancer tissue. 1,VIM PolBD-PClonal Antibody was diluted at 1:200(4°,overnight). 2, Sodium citrate pH 6.0 was used for antigen retrieval(>98°C,20min). 3,Secondary antibody was diluted at 1:200(room temperature, 30min) Negtive control was used by secondary antibody only.)') WHERE id in (select id from addon where typeid='190' AND catalogno='BD-PT4878');
2018年2月19日 18:00