如何加快SQL服务器的多行插入?

时间:2010-09-29 21:06:11

标签: sql-server performance

我一次在表中插入大约400行(SQL Server 2008)。我已经尝试了UNION ALL,但这大大减慢了速度。我决定使用以下查询:

INSERT INTO table VALUES (a, b,...),(c, d,...),...(x,y,...); 

当我通过ODBC进行此查询时,大约需要400毫秒(我使用C ++并且单次调用sqlExecDirect会转到odbc32.dll)。但是,当我在Getdate()包装的MS SQL Server Management Studio中运行查询时:

SELECT Getdate()
INSERT INTO ...
SELECT Getdate()

需要~10ms。相比之下,在同一台机器上,MySQL中的相同查询大约需要20ms。

  1. SELECT Getdata()是一种可靠的交易时间方式吗?
  2. 为什么MS SQL Server Management Studio会这么快?
  3. 我可以做些什么来改善表现? ODBC的替代方案?直接连接到SQL服务器?

2 个答案:

答案 0 :(得分:0)

第一次连接通常需要一段时间才能完成设置。这可以解释初始延迟:在SSMS中,当您启动查询时,连接已经就位。尝试从同一个C ++程序中插入两次,看看是否有所不同。

另外:你使用的ODBC驱动程序是什么?对于ODBC,请考虑本机驱动程序:

Driver={SQL Server Native Client 10.0};Server=myServerAddress;
    Database=myDataBase;Uid=myUsername;Pwd=myPassword;

您也可以通过COM使用ADO,而不是ODBC。使用生成的包装器很容易做到。然后,您可以使用OLE DB连接:

Provider=SQLNCLI10;Server=myServerAddress;
    Database=myDataBase;Uid=myUsername; Pwd=myPassword;

答案 1 :(得分:0)

您进行基准测试的方式,您没有捕获编译时间。这样做:

SET STATISTICS TIME ON
GO
INSERT INTO ...