如题
解决方案 »
- 请教一个问题!
- Convert.ToInt32(cmd.ExecuteScalar())提示缺少一个参数,新手请求帮助!
- 问高哥的帖子?哈哈,长点
- 请大家推荐个好用的.net代码生成工具啊
- form.controls.add
- 请问有关鼠标效果的问题
- WEB treeview帮定右建单击事件?然后弹出一个层,如何写?求源代码!
- 怎样能够获得listbox中用户选中选择项目的顺序?
- 为什么用asp.net作的程序比asp做的同样功能的程序慢? 请asp.net专家解释
- ?我只是将iis的security账户设了一下anonemous登陆,然后又设回nt验证,竟然发现网站目录里面的很多html和asp页面都不能读(坏了?),既不能编辑,也不能运行,也不能复制,到底怎么回事啊!我疯了!????!!
- 怎么防止页面刷新提交???
- 如果将url进行编码
技术方案一:
实现方式是利用数据库访问类调用存储过程,利用循环逐条插入。很明显,这种方式效率并不高
技术方案二:
ADO.NET2.0的一个新的特性:SqlBulkCopy。有关这个的性能,很早之前我是亲自做过性能测试的,效率非常高。
技术方案三:
利用SQLServer2008的新特性--表值参数(Table-Valued Parameter)。表值参数是SQLServer2008才有的一个新特性,使用这个新特性,我们可以把一个表类型作为参数传递到函数或存储过程里。不过,它也有一个特点:表值参数在插入数目少于 1000 的行时具有很好的执行性能。
技术方案四:
对于单列字段,可以把要插入的数据进行字符串拼接,最后再在存储过程中拆分成数组,然后逐条插入。查了一下存储过程中参数的字符串的最大长度,然后除以字段的长度,算出一个值,很明显是可以满足要求的,只是这种方式跟第一种方式比起来,似乎没什么提高,因为原理都是一样的。
技术方案五:
考虑异步创建、消息队列等等。这种方案无论从设计上还是开发上,难度都是有的。
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(
connectionString, SqlBulkCopyOptions.KeepIdentity |
SqlBulkCopyOptions.UseInternalTransaction))
{
bulkCopy.BatchSize = 10;
}
循环插入
查询添加索引,分页查询
http://www.cnblogs.com/doll-net/archive/2007/07/22/827261.html
CREATE TABLE Nums(n int NOT NULL PRIMARY KEY CLUSTERED)
--书上介绍了很多种填充方法,以下是最高效的一种,需要SS2005的ROW_NUMBER()函数。
WITH B1 AS(SELECT n=1 UNION ALL SELECT n=1), --2
B2 AS(SELECT n=1 FROM B1 a CROSS JOIN B1 b), --4
B3 AS(SELECT n=1 FROM B2 a CROSS JOIN B2 b), --16
B4 AS(SELECT n=1 FROM B3 a CROSS JOIN B3 b), --256
B5 AS(SELECT n=1 FROM B4 a CROSS JOIN B4 b), --65536
CTE AS(SELECT r=ROW_NUMBER() OVER(ORDER BY (SELECT 1)) FROM B5 a CROSS JOIN B3 b) --65536 * 16
INSERT INTO Nums(n)
SELECT TOP(1000000) r FROM CTE ORDER BY r