SQL 快速向表中插入100万条数据
来源:互联网 发布:mysql union order by 编辑:程序博客网 时间:2024/04/27 19:13
SET
NOCOUNT
ON
;
02
USE master;
03
GO
04
----判断数据库TestDB是否存在,即创建数据库
05
IF db_id(
'TestDB'
)
IS
NULL
06
CREATE
DATABASE
TestDB
07
GO
08
USE TestDB
09
GO
10
---判断Nums 表是否存在,存在即将其删除
11
IF OBJECT_ID(
'dbo.Nums'
)
IS
NOT
NULL
12
DROP
TABLE
dbo.Nums;
13
GO
14
---重新创建表
15
CREATE
TABLE
dbo.Nums(n
int
NOT
NULL
PRIMARY
KEY
);
16
DECLARE
@
max
AS
int
,@rc
AS
int
;
17
SET
@
max
=1000000;
18
SET
@rc=1;
19
20
INSERT
INTO
dbo.Nums
VALUES
(1);
21
WHILE @rc*2<=@
max
22
BEGIN
23
INSERT
INTO
dbo.Nums
SELECT
n+@rc
FROM
dbo.Nums;
24
SET
@rc=@rc*2;
25
END
26
INSERT
INTO
dbo.Nums
27
SELECT
n+@rc
FROM
dbo.Nums
WHERE
n+@rc<=@
max
;
28
GO
代码分析:
SET NOCOUNT ON:这是一个存储过程,当 SET NOCOUNT 为ON 时不返回计数(表示受Transact-SQL 语句影响的行数,即消息返回:命令已完成)。当SET NOCOUNT 为OFF 时返回计数((1 行受影响)(2 行受影响)(4 行受影响)(8 行受影响)(16 行受影响)....等等返回信息).如果存储过中包含的一些语句并不返回许多实际的数据,则该设置由于大量减小了网络流量,因些可以显著提高性能。
SET @max=1000000:为定义插入的最大值。这里我设其为100W。
1
INSERT
INTO
dbo.Nums
VALUES
(1);
2
WHILE @rc*2<=@
max
3
BEGIN
4
INSERT
INTO
dbo.Nums
SELECT
n+@rc
FROM
dbo.Nums;
5
SET
@rc=@rc*2;
6
END
7
INSERT
INTO
dbo.Nums
8
SELECT
n+@rc
FROM
dbo.Nums
WHERE
n+@rc<=@
max
;
9
GO
以上这段代码为核心代码:
INSERT INTO dbo.Nums SELECT n+@rc FROM dbo.Nums:的意思是:在一个While循环中的,每执行一次都会向表dbo.nums 中插入一批数据,这批数据是表dbo.nums 中原有的数据,只是字段 n 的值是在原基础上增加了2 * @rc(@rc=1,2,3,执行次数) 图解:
上图的算法就是描述这句SQL:INSERT INTO dbo.Nums SELECT n+@rc FROM dbo.Nums;?而 n+@rc 的值变化为 2的N次方(包括0次方)
当执行完:INSERT INTO dbo.Nums SELECT n+@rc FROM dbo.Nums; 时发现并没有100万条数据,然后 我们补充一句SQL语句:
INSERT INTO dbo.Nums SELECT n+@rc FROM dbo.Nums WHERE n+@rc<=@max; GO 这句的意思为:补全小于或等于 @max(100W);的所有数据。 执行以整个SQL语句时间可能需要几分钟,但总比一路for 的速度快吧?源码下载
- SQL 快速向表中插入100万条数据
- 创建一个触发器来向表中插入100万条数据
- sql server 2000中循环插入100万条数据
- sql 语句 循环插入100万条数据到某个表中
- 如何在hbase中快速插入10万条数据
- 如何在hbase中快速插入10万条数据
- 3分钟左右的时间如何向MySQL数据库中插入100万条数据
- sql server 2000中循环插入100万条数据(原创)
- sql 循环插入20万条数据
- 向SQL数据库中插入多条数据
- sql向表中插入数据
- 向数据库中插入多条数据
- SQL SERVER 快速插入千万条数据
- 09-如何快速的向表中插入数据
- SQL-向表中插入数据,查询数据
- 插入10万条数据
- sql向math数据库的xzt表中添加10万条记录
- 探讨在1000万条数据的MS SQL SERVER数据库中实现快速的数据提取和数据分页
- VB webbrowser 拦截弹出对话框并获取对话框信息
- 数据库画ER图
- 谁打开了系在我们智慧翅膀上的绳索
- 总算是明白 java正则表达式 中 Greedy 、Reluctant 、Possessive数量词的区别了
- USACO/Sorting a Three-Valued Sequence (简单题,方法正确性待证)
- SQL 快速向表中插入100万条数据
- unity3D与网页的交互
- Unity宣布支持Flash 网页游戏迎来3D元年
- 为什么停止公布高考状元信息,最着急的是清华北大
- C链表
- Struct memset的陷阱
- uva10494 - If We Were a Child Again
- 一个现象,你能看到什么?
- 游戏开发者眼中的Unity 3D网页游戏测评报告