将xml数据存储到SQL Server时,多个小查询或一个大查询

时间:2013-11-19 11:05:40

标签: sql sql-server xml

我正在解析我循环的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 ...
  ");
}

2 个答案:

答案 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