我一次在表中插入大约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。
答案 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 ...