我正在解析我循环的xml文件并将信息存储到SQL Server中。我发送MERGE
查询以插入或更新信息。
最好将此信息存储在变量中,并在循环结束后发送查询,或者在循环中发送大量小查询?我希望每个循环有60-100个查询。
$DOM=simplexml_load_file($url);
$info=$DOM->info;
foreach($info as $i){
$i_name=$i['name'];
$i_id=$i['id'];
...
$q=sqlsrv_query($conn,"
MERGE dbo.members m USING (
SELECT
'$i_name' as name,
'$i_id' as id,
...
) s ON ( m.id=s.id )
WHEN MATCHED THEN
UPDATE SET ...
WHEN NOT MATCHED THEN
INSERT ...
");
}
答案 0 :(得分:0)
我的经验是,最佳性能来自于一次批量处理SQL语句。
希望您自己的语言(php?perl?can not #t tell)具有此功能,否则您可以自行编写代码。
当然,如果你的数据库在同一台机器上,它可能没什么区别。
答案 1 :(得分:0)
这取决于各种因素。您可以设置测试场景并检查两个选项的性能,然后根据您的情况选择更好的选项。我们有一个类似的案例,最好的选择是让一个存储过程收到一个包含所有需要值的表。
检查其他类似问题,它们与您的问题不完全相同,但我相信那里给出的答案对您有很大的帮助。
Update or Merge very big tables in SQL Server
Multiple INSERT statements vs. single INSERT with multiple VALUES