我想知道理论时间。我知道每台服务器都会有所不同。
我将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,执行时间相同。
答案 0 :(得分:1)
取决于很多事情(索引,使用表的索引视图,外键,硬件等等)可能需要时间。
您可以尝试使用针对此类内容进行优化的批量插入,但您必须加载文件的数据,但这很简单,您甚至可以从图形客户端执行此操作
答案 1 :(得分:1)
您提到目标表上的索引,但不提及源。如果源表在FiscalYear列上没有非聚集索引,请添加一个。这应该加快内部查询(SELECT
)。
此外,您可以在索引中包含要选择的其他列,以消除执行计划中的键查找。 (如果SELECT
语句中的列表示表中的所有列,那么FiscalYear列上的聚簇索引可能会更好,但这可能会干扰现有的主键(如果有的话)。)< / p>
或者你总是可以增加盒子上的硬件,但这对优化INSERT
语句可能有点过分。
编辑:
您还可以使用SSIS来移动数据。您可以保存SSIS包,并从应用程序中调用它或在SQL Server上安排它。
答案 2 :(得分:1)
源表上的FiscalYear上是否有聚簇索引? 或者是非聚集覆盖索引?
SELECT本身需要多长时间?
目标表上的任何触发器?
假设正在使用链接服务器,使用了什么安全性?
或者它是同一实例上的数据库到数据库?如果是这样,在将数据库添加到实例
后,在源数据库上更新了统计信息答案 3 :(得分:1)
答案 4 :(得分:0)
这完全取决于服务器中的硬件, 磁盘,CPU和RAM速度都很重要。
组件越快,查询越快。