在sql 2005中插入一百万行需要多长时间?

时间:2011-08-02 12:19:40

标签: sql-server-2005 tsql

我想知道理论时间。我知道每台服务器都会有所不同。

我将SQL2K数据库中的1,000,000个99Byte行拖到同一服务器实例上的SQL2005数据库中。

源表上有索引。执行计划表明<missing index> ????

目标表上没有索引。

查询大约需要1分钟。这似乎真的很长......考虑到这是一个简单的insert into

INSERT INTO EDW.STAGE.DESTINATION SELECT AccountNumber, CardNumber, FiscalYear, SeqNumber,Category,DateSaved, FullLandValue, FullBuildingValue, TotalValue, ValueExemption,TaxableTotal,DataPreAssesGeneralID,getdate(),2010 FROM SOURCE WHERE FiscalYear = 2010

我打赌有办法加速这个......但是怎么样?

更新

这实际上是一个动态SQL语句。为简洁起见,我只显示生成的字符串。我将语句测试为动态vs t-SQL,执行时间相同。

5 个答案:

答案 0 :(得分:1)

取决于很多事情(索引,使用表的索引视图,外键,硬件等等)可能需要时间。

您可以尝试使用针对此类内容进行优化的批量插入,但您必须加载文件的数据,但这很简单,您甚至可以从图形客户端执行此操作

答案 1 :(得分:1)

您提到目标表上的索引,但不提及源。如果源表在FiscalYear列上没有非聚集索引,请添加一个。这应该加快内部查询(SELECT)。

此外,您可以在索引中包含要选择的其他列,以消除执行计划中的键查找。 (如果SELECT语句中的列表示表中的所有列,那么FiscalYear列上的聚簇索引可能会更好,但这可能会干扰现有的主键(如果有的话)。)< / p>

或者你总是可以增加盒子上的硬件,但这对优化INSERT语句可能有点过分。

编辑:

您还可以使用SSIS来移动数据。您可以保存SSIS包,并从应用程序中调用它或在SQL Server上安排它。

答案 2 :(得分:1)

源表上的FiscalYear上是否有聚簇索引? 或者是非聚集覆盖索引?

SELECT本身需要多长时间?

目标表上的任何触发器?

假设正在使用链接服务器,使用了什么安全性?

或者它是同一实例上的数据库到数据库?如果是这样,在将数据库添加到实例

后,在源数据库上更新了统计信息

答案 3 :(得分:1)

答案 4 :(得分:0)

这完全取决于服务器中的硬件, 磁盘,CPU和RAM速度都很重要。

组件越快,查询越快。