SqlBulkCopy批量插入和索引的关系
.net中批量插入基本都用SqlBulkCopy,速度很快,但是这几天发现个问题,2000数据居然15s,百思不得其解。经过大量测试,发现过多的索引和索引碎片会严重影响插入速度,表的数据量大小反而不会影响插入速度。
如图:索引(历史遗留原因,我也不知道为啥建这么多索引)
SqlBulkCopy:
sw.Start(); using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(str)) { sqlBulkCopy.BatchSize = batchSize; sqlBulkCopy.DestinationTableName = tableName; sqlBulkCopy.WriteToServer(dt); } sw.Stop();
插曲:最开始批量操作用的是Z.EntityFramework.Extensions,插入速度很快(当时没有删除索引),上线后次月发现这个dll过期,收费的。