我从外部URL下载XML并将其解析为mysql。
Rate::updateOrCreate([
'exchanger_id' => $exchangerId,
'signature_from_id' => $signatureFromId,
'signature_to_id' => $signatureToId
], [
'in' => $item->in,
'out' => $item->out,
'amount' => $item->amount
]);
事情是XML包含许多项目,并且我解析了许多站点,因此它导致20K查询20-25个URL。稍后,我将解析大约300个URL,查询数量将会增加。
我如何优化此流程?我的意思是updateOrCreate
部分。如果存在exchanger_id
,signature_from_id
和signature_to_id
的行,我需要更新它,否则创建一个新行。并为每个xml项重复一次。
当我意识到Laravel至少进行了2次查询时:首先是select
,它检查该行是否存在,其次是create/update
。
无法考虑任何批处理示例:(
更新
我为前三列(intersection_id,signature_from_id,signature_to_id)创建了一个唯一的复合键,并下载了这个特征https://github.com/yadakhov/insert-on-duplicate-key
查询数量变为26(约为20000)。但处理所有这些所需的时间并没有改变。我错过了什么......