*药之无味*

该拼搏的年华就别选择安逸

  • 博客访问: 10790
  • 博文数量: 59
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-19 10:44
个人简介

.

ITPUB论坛APP

ITPUB论坛APP



APP发帖 享双倍积分

文章分类

全部博文(59)

文章存档

2017年(51)

2016年(8)

我的朋友
微信关注

IT168企业级官微



微信号:IT168qiye



系统架构师大会



微信号:SACC2013

订阅
热词专题
Sqlserver数据写入表测试 2017-11-22 21:51:02

分类: SQL Server

1、创建表:
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
CREATE TABLE dbo.Table_3
(
id int NOT NULL,
company_id nvarchar(MAX) NULL,
number nvarchar(MAX) NULL,
code nvarchar(MAX) NULL,
input_tele bigint NULL,
type nvarchar(MAX) NULL
)  ON [PRIMARY]
TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE dbo.Table_3 SET (LOCK_ESCALATION = TABLE)
GO
COMMIT


2、测试表插入
对表插入200000条记录:
set nocount on
declare @i int
set @i = 0
while @i < 200000
begin
insert into Table_3 values (@i,'abcd','123','234','345','567')
set @i = @i +1
end
go

耗时3分11秒。

dbcc showcontig('Table_3')
go
DBCC SHOWCONTIG 正在扫描 'Table_3' 表...
表: 'Table_3' (370100359);索引 ID: 0,数据库 ID: 5
已执行 TABLE 级别的扫描。
- 扫描页数................................: 1482
- 扫描区数..............................: 188
- 区切换次数..............................: 187
- 每个区的平均页数........................: 7.9
- 扫描密度 [最佳计数:实际计数].......: 98.94% [186:188]
- 区扫描碎片 ..................: 1.60%
- 每页的平均可用字节数.....................: 403.7
- 平均页密度(满).....................: 95.01%
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

未加索引表大小:

加索引后表大小:
dbcc showcontig('Table_3')
go

DBCC SHOWCONTIG 正在扫描 'Table_3' 表...
表: 'Table_3' (386100416);索引 ID: 1,数据库 ID: 5
已执行 TABLE 级别的扫描。
- 扫描页数................................: 1087
- 扫描区数..............................: 136
- 区切换次数..............................: 135
- 每个区的平均页数........................: 8.0
- 扫描密度 [最佳计数:实际计数].......: 100.00% [136:136]
- 逻辑扫描碎片 ..................: 0.00%
- 区扫描碎片 ..................: 3.68%
- 每页的平均可用字节数.....................: 0.3
- 平均页密度(满).....................: 100.00%
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。


清空表数据。
修改表结构:
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
CREATE TABLE dbo.Tmp_Table_3
(
id int NOT NULL,
company_id varchar(50) NULL,
number varchar(50) NULL,
code varchar(50) NULL,
input_tele bigint NULL,
type varchar(50) NULL
)  ON [PRIMARY]
GO
ALTER TABLE dbo.Tmp_Table_3 SET (LOCK_ESCALATION = TABLE)
GO
IF EXISTS(SELECT * FROM dbo.Table_3)
EXEC('INSERT INTO dbo.Tmp_Table_3 (id, company_id, number, code, input_tele, type)
SELECT id, CONVERT(varchar(50), company_id), CONVERT(varchar(50), number), CONVERT(varchar(50), code), input_tele, CONVERT(varchar(50), type) FROM dbo.Table_3 WITH (HOLDLOCK TABLOCKX)')
GO
DROP TABLE dbo.Table_3
GO
EXECUTE sp_rename N'dbo.Tmp_Table_3', N'Table_3', 'OBJECT' 
GO
COMMIT


对表插入200000条记录:
set nocount on
declare @i int
set @i = 0
while @i < 200000
begin
insert into Table_3 values (@i,'abcd','123','234','345','567')
set @i = @i +1
end
go

耗时3分07秒。

dbcc showcontig('Table_3')
go

DBCC SHOWCONTIG 正在扫描 'Table_3' 表...
表: 'Table_3' (386100416);索引 ID: 0,数据库 ID: 5
已执行 TABLE 级别的扫描。
- 扫描页数................................: 1143
- 扫描区数..............................: 145
- 区切换次数..............................: 144
- 每个区的平均页数........................: 7.9
- 扫描密度 [最佳计数:实际计数].......: 98.62% [143:145]
- 区扫描碎片 ..................: 2.07%
- 每页的平均可用字节数.....................: 397.0
- 平均页密度(满).....................: 95.10%
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。




truncate table Table_3后:
dbcc showcontig('Table_3')
go

DBCC SHOWCONTIG 正在扫描 'Table_3' 表...
表: 'Table_3' (386100416);索引 ID: 0,数据库 ID: 5
已执行 TABLE 级别的扫描。
- 扫描页数................................: 0
- 扫描区数..............................: 0
- 区切换次数..............................: 0
- 每个区的平均页数........................: 0.0
- 扫描密度 [最佳计数:实际计数].......: 100.00% [0:0]
- 区扫描碎片 ..................: 0.00%
- 每页的平均可用字节数.....................: 0.0
- 平均页密度(满).....................: 0.00%
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

对表加索引:
对id字段加主键聚集索引:
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
ALTER TABLE dbo.Table_3 ADD CONSTRAINT
PK_Table_3 PRIMARY KEY CLUSTERED 
(
id
) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]


GO
ALTER TABLE dbo.Table_3 SET (LOCK_ESCALATION = TABLE)
GO
COMMIT

对表插入200000条记录:
set nocount on
declare @i int
set @i = 0
while @i < 200000
begin
insert into Table_3 values (@i,'abcd','123','234','345','567')
set @i = @i +1
end
go

dbcc showcontig('Table_3')
go

DBCC SHOWCONTIG 正在扫描 'Table_3' 表...
表: 'Table_3' (386100416);索引 ID: 1,数据库 ID: 5
已执行 TABLE 级别的扫描。
- 扫描页数................................: 1087
- 扫描区数..............................: 139
- 区切换次数..............................: 138
- 每个区的平均页数........................: 7.8
- 扫描密度 [最佳计数:实际计数].......: 97.84% [136:139]
- 逻辑扫描碎片 ..................: 0.55%
- 区扫描碎片 ..................: 2.16%
- 每页的平均可用字节数.....................: 0.3
- 平均页密度(满).....................: 100.00%
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

先加索引后插入数据后表大小:


对于20W的数据量:
建好表,插入数据,再加索引。
建好表,建好索引,再插入数据。
感觉时间花费上差不多,空间消耗上也差不多。









阅读(252) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册