2014-01-08 19 views
0

在SQL中,将插入的性能有所不同基于多少条记录在表中?我知道更新声明可能会有所不同,但插入是什么?SQL INSERT性能和表大小

例如,将1000万条记录的表中的insert语句与另一个具有相同schema但1k条记录的table中的insert语句相同吗?

/*my schema*/ 
[id] [int] NOT NULL, 
[type] [nvarchar](20) NOT NULL, 
[relatedP] [int] NULL, 
[relatedC] [int] NULL, 
[eventdate] [DateTime] NOT NULL 

/*no triggers and inserts as simple as*/ 
INSERT INTO myTable (id,type,relatedP,relatedC,eventdate) VALUES (@id,@type,@relatedP,@RelatedC,@date) 
+2

它真的归结于你在桌上的索引类型。如果有很多索引,插入将需要更长的时间,因为这些索引需要更新,更多的叶子创建等。或者如果大型字段用于聚集索引等。如果表上没有索引,则表中的数据量并不重要。 – Brettski

+2

这取决于很多因素,如表中的约束,索引和默认值(例如,插入到未建索引的堆表应该需要一个固定时间),以及这些因素是否可以在恒定时间内运行。而且,随着页面层次结构变得更深,索引会稍微长一点。 – StuartLC

+0

非常感谢,这就是我需要知道,我有5列与基本类型的简单模式是什么,就在我的情况没有索引,但大小是刚开更大约4.4万条记录,现在,想知道如果我要有关 – user1492051

回答

1

因为它似乎是你的表没有聚集索引(无论这将导致默认的聚集索引主键),它将被作为heap创建。

此外,您的表没有任何非聚集索引 - 通常,随着索引表中的行数增加,索引深度也将逐渐变为deeper,这意味着插入性能会略微降低。

但是由于看起来您没有索引,约束,默认值,索引视图或持久计算列,所以插入应该随着表的增长而保持不变。

(IMO一个table with no indexing at all is fairly unusual - 过滤查询性能将可能是糟​​糕 - 通常此将只对例如日志或,然后完全重新读取与读取器和加工成最终表暂存数据是有用的。)

+0

正是它只是一个事件日志表 – user1492051

+0

顺便说一句,'BulkCopy'通常是将数据传输到这样的表的真正性能方法。例如如果您使用的是.net,则可以在内存中批量处理行,然后间歇性地使用[SqlBulkCopy](http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.aspx) – StuartLC

+0

i在.NET中使用批量复制之前,但它不删除已经在表中的数据? – user1492051