我有得到这样的SQL服务器插入性能
INSERT INTO InvoiceDetail (LegacyId,InvoiceId,DetailTypeId,Fee,FeeTax,Investigatorid,SalespersonId,CreateDate,CreatedById,IsChargeBack,Expense,RepoAgentId,PayeeName,ExpensePaymentId,AdjustDetailId)
VALUES(1,1,2,1500.0000,0.0000,163,1002,'11/30/2001 12:00:00 AM',1116,0,550.0000,850,NULL,@ExpensePay1,NULL);
DECLARE @InvDetail1 INT; SET @InvDetail1 = (SELECT @@IDENTITY);
只有110K行生成此查询生成一个INSERT查询。
它需要30分钟,所有这些查询的来执行
我检查查询计划和最大的%节点
聚集索引插入,在57%的查询成本 有着悠久的XML我不想发布。
表阀芯是38%的查询费用
<RelOp AvgRowSize="35" EstimateCPU="5.01038E-05" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="1" LogicalOp="Eager Spool" NodeId="80" Parallel="false" PhysicalOp="Table Spool" EstimatedTotalSubtreeCost="0.0466109">
<OutputList>
<ColumnReference Database="[SkipPro]" Schema="[dbo]" Table="[InvoiceDetail]" Column="InvoiceId" />
<ColumnReference Database="[SkipPro]" Schema="[dbo]" Table="[InvoiceDetail]" Column="InvestigatorId" />
<ColumnReference Column="Expr1054" />
<ColumnReference Column="Expr1055" />
</OutputList>
<Spool PrimaryNodeId="3" />
</RelOp>
所以我的问题是什么,是没有办法,我能做些什么来改善这个东西的速度?我已经运行 ALTER TABLE TABLENAME NOCHECK约束全部 查询前然后 ALTER TABLE TABLENAME NOCHECK约束查询后全部为 。
而这并没有削减几乎任何时间。
知道我在使用SqlCommand对象发送查询的.NET应用程序中运行这些查询。
然后我试着将sql命令输出到一个文件,然后使用sqlcmd执行它,但我没有得到任何更新,所以我放弃了这一点。
任何想法或提示或帮助?
更新:
好,所以你们都非常有帮助。在这种情况下,我希望我可以赞扬不止一个答案。
解决此问题的解决方案有两方面。
第一:
1)我禁用/重新启用所有的外键(比投下他们更容易)
ALTER TABLE TableName NOCHECK CONSTRAINT ALL
ALTER TABLE TableName CHECK CONSTRAINT ALL
2)我禁用/重新启用索引(再次比下降容易得多)
ALTER INDEX [IX_InvoiceDetail_1] ON [dbo].[InvoiceDetail] DISABLE
ALTER INDEX [IX_InvoiceDetail_1] ON [dbo].[InvoiceDetail] REBUILD PARTITION = ALL WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, ONLINE = OFF, SORT_IN_TEMPDB = OFF)
第二种:
我包裹所有插入件统计的进入一项交易。我最初并不知道如何在.NET中这样做。
我非常感谢所有的输入。
如果我曾经做过这种从DB到DB的翻译,我一定会从BULK INSERT开始。它似乎更灵活,更快。
两者告诉我们更多关于您的聚集索引和插入。您的插入是否与您的聚集索引相关,以便所有记录将被追加到现有记录之后? (即记录自然是顺序的聚集索引) – 2010-03-16 20:27:29
永远不要使用@@身份! YOu可能会让数据完整性大打折扣,因为它不会总是返回正确的值。改用scope_Identity()。 – HLGEM 2010-03-18 18:42:23
我知道这是旧的,但你记得最后的查询花了多少时间?只是想知道这个差异有多大? – 2017-01-13 07:39:52