如果让你的insert操作速度增加1000倍
2011-07-28 00:41
405 查看
很多时候方法选对了对于我们做事将会是事半功倍。
大家平时都会使用insert语句,特别是有时候需要一个大批量的数据来做测试,一条一条insert将会是非常慢的,那么我们如何让我们的inser更快呢。
先看个例子:
我们需要在如下这个表中插入测试数据,包含两列,一个是itemid,一个是itemname。如果向这个表中插入103,680,000 条记录,普通的插入方法可能需要20多天才能完成,但是用这里介绍的新方法在5个小时内就能够完成。
先看一般的数据插入方法,假设我们向上表中插入100000 条数据:
新的插入方法会使用已经插入的数据来进行下一条记录的操作,原理如下:
那么看看我的新insert代码:
用第一种方法可能需要几十分钟插入100000数据,但是用第二种只要4秒钟。再改进下,2秒钟就完成:
大家平时都会使用insert语句,特别是有时候需要一个大批量的数据来做测试,一条一条insert将会是非常慢的,那么我们如何让我们的inser更快呢。
先看个例子:
我们需要在如下这个表中插入测试数据,包含两列,一个是itemid,一个是itemname。如果向这个表中插入103,680,000 条记录,普通的插入方法可能需要20多天才能完成,但是用这里介绍的新方法在5个小时内就能够完成。
先看一般的数据插入方法,假设我们向上表中插入100000 条数据:
CREATE TABLE #tempTable([Item ID] [bigint], [Item Name] nvarchar(30)) DECLARE @counter int SET @counter = 1 WHILE (@counter < 100000) BEGIN INSERT INTO #tempTable VALUES (@counter, 'Hammer') SET @counter = @counter + 1 END SELECT * FROM #tempTable DROP TABLE #tempTable
新的插入方法会使用已经插入的数据来进行下一条记录的操作,原理如下:
那么看看我的新insert代码:
CREATE TABLE #tempTable([Item ID] [bigint], [Item Name] nvarchar(30)) INSERT INTO #tempTable VALUES (1, 'Hammer') WHILE((SELECT COUNT(*) FROM #tempTable) < 100000) BEGIN INSERT INTO #tempTable ([Item ID], [Item Name]) (SELECT [Item ID] + (SELECT COUNT(*) FROM #tempTable), 'Hammer' FROM #tempTable) END SELECT * FROM #tempTable DROP TABLE #tempTable
用第一种方法可能需要几十分钟插入100000数据,但是用第二种只要4秒钟。再改进下,2秒钟就完成:
CREATE TABLE #tempTable([Item ID] [bigint], [Item Name] nvarchar(30)) INSERT INTO #tempTable VALUES (1, 'Hammer') DECLARE @counter int SET @counter = 1 WHILE(@counter <= 17) BEGIN INSERT INTO #tempTable ([Item ID], [Item Name]) (SELECT [Item ID] + (SELECT COUNT(*) FROM #tempTable), 'Hammer' FROM #tempTable) SET @counter = @counter + 1 END SELECT * FROM #tempTable DROP TABLE #tempTable
相关文章推荐
- 如果让你的insert操作速度增加1000倍
- 让你的insert操作速度增加1000倍的方法
- 如果结合GridView和DetailsView对数据进行操作,那么当数据库的记录为空的时候,怎么来增加新记录呢?
- 比较“+”,insert( )和append( )的速度,利用循环向列表中增加10000个元素,比较几种方法的运行时间。
- Oracle的Insert、Update、Delete等DML操作速度的提高
- 提高Oracle的Insert、Update等操作速度
- Spring中使用事务搭建转账环境 转账操作一个账户要减少资金操作一个账户要增加资金操作,如果在两个操作间出现异常转账失败 所以要使用事务
- 批量增加ROLDID,如果有问题什么也不操作
- 数据库操作,如果数据存在则update否则insert
- _disable_logging是否会使数据库的数据加载操作速度惊人的增加?
- 使用oracle数据库,多用户同时对一个表进行增加,删除,修改,查看等操作,会不会有影响?
- MySQL INSERT插入条件判断:如果不存在则插入
- 1 详解PHP使用DOMDocument类遍历、增加、修改、删除XML节点操作
- mongodb 数据的增加删除操作
- MyBatis中Insert操作介绍
- javascript操作dom 建立 增加 删除 克隆 访问节点
- Win10预览版提供了完全桌面化、窗口化的操作方式 加快桌面应用的启动速度
- 用户登录,并完成增加、查询、解锁操作
- 6.(Mysql数据管理相关)连接MYSQL,修改密码,增加新用户,数据库相关命令,表操作相关命令,数据相关命令,数据库sql导入和导出,备份数据库,查看不到mysql数据库的解决办法
- 触发器中判断操作是Insert还是Update还是Delete