Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用lazarus提高ms sql插入性能_Sql Server_Performance_Lazarus - Fatal编程技术网

Sql server 使用lazarus提高ms sql插入性能

Sql server 使用lazarus提高ms sql插入性能,sql-server,performance,lazarus,Sql Server,Performance,Lazarus,我有一个简单的insert语句和3个数据字段。 不是主键且不是自动递增的标记ID, 将easy DateTime Now保存为字符串和包含简单Device计算的浮点值的时间戳 sql server实际上是本地的,但稍后它将位于不在本地网络中的另一台计算机上。现在我有25.8秒的时间输入10000个条目。。我该如何改进这一点 我的代码如下所示: procedure TForm1.testMssql(Datensaetze: integer); var i: integer; before,

我有一个简单的insert语句和3个数据字段。 不是主键且不是自动递增的标记ID, 将easy DateTime Now保存为字符串和包含简单Device计算的浮点值的时间戳

sql server实际上是本地的,但稍后它将位于不在本地网络中的另一台计算机上。现在我有25.8秒的时间输入10000个条目。。我该如何改进这一点

我的代码如下所示:

procedure TForm1.testMssql(Datensaetze: integer);
var
  i: integer;
  before,after,result: real;
begin
  before := GetTickCount;
  for i:= 0 to Datensaetze do
  begin
    try
          query.DataBase := conn;
          query.UsePrimaryKeyAsKey:=false;
          query.SQL.Text := 'insert into speedTest(TagID,timestamp,Value) values(:tag_id,:timestamp, :value)';
          query.Params.ParamByName('tag_id').AsInteger := i ;
          query.Params.ParamByName('timestamp').AsString := DateTimeToStr(Now);
          query.Params.ParamByName('value').AsFloat := ((i*2) / 55);
          query.ExecSQL;
          SQLTransaction1.Commit;
    except
      on E: Exception do
         ShowMessage(E.Message);
    end;
  end;
  after := GetTickCount;

  result := (after - before)/1000;
  Memo1.Text := FloatToStr(result);
end;  
批量插入

批量插入


我想往返db所花的时间最多。 相反,您可以创建一个如下所示的XML,包括所有行

<root>
  <row> 
    <TagID>1</TagID>
    <timestamp>2010-10-10T10:10:10</timestamp>
    <value>10</value>
  </row>    
  <row> 
    <TagID>2</TagID>
    <timestamp>2011-11-11T11:11:11</timestamp>
    <value>20</value>
  </row>    
</root>
您必须修改SP以匹配所使用的任何数据类型。
我相信这将比您正在做的更快,但是没有什么比您自己测试更快的了。

我想往返数据库花费的时间最多。 相反,您可以创建一个如下所示的XML,包括所有行

<root>
  <row> 
    <TagID>1</TagID>
    <timestamp>2010-10-10T10:10:10</timestamp>
    <value>10</value>
  </row>    
  <row> 
    <TagID>2</TagID>
    <timestamp>2011-11-11T11:11:11</timestamp>
    <value>20</value>
  </row>    
</root>
您必须修改SP以匹配所使用的任何数据类型。
我相信这会比你现在做的更快,但是没有什么比自己测试更好的了。

想要批处理的另一个原因是,所有的
commit
语句都会显著降低速度。想要批处理的另一个原因是,所有的
commit
语句都会显著降低速度。