Sqlserver資料寫入表測試
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的資料量:
建好表,插入資料,再加索引。
建好表,建好索引,再插入資料。
感覺時間花費上差不多,空間消耗上也差不多。
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的資料量:
建好表,插入資料,再加索引。
建好表,建好索引,再插入資料。
感覺時間花費上差不多,空間消耗上也差不多。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22996654/viewspace-2147636/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料包表測試
- 定時做資料庫恢復測試sqlserver資料庫SQLServer
- Mysql 大資料表 資料匯入到SqlServer 中的方法MySql大資料Server
- 測試TOM=SQLLOADER載入製表符號資料SQL符號
- ETL測試或資料倉儲測試入門
- 使用EXPDP/IMPDP匯入匯出表中資料/後設資料測試
- 關於SqlServer資料表操作SQLServer
- 將SQLServer表直接匯入Oracle資料庫(圖文教程)SQLServerOracle資料庫
- SQLSERVER恢復測試SQLServer
- sqlserver 安裝測試SQLServer
- 磁碟IO故障導致的SQLServer資料庫無法寫入SQLServer資料庫
- 匯入表的部分資料到測試環境
- Sqlserver如何把查詢的資料insert進入新表SQLServer
- logstash匯入movielens測試資料
- 極速匯入elasticsearch測試資料Elasticsearch
- 測試TOM=SQLLDR載入日期資料SQL
- 關於LOG4J寫入SQLServer資料庫中的求助!!SQLServer資料庫
- HTAP資料庫PostgreSQL場景與效能測試之36-(OLTP+OLAP)不含索引單表批量寫入資料庫SQL索引
- sqlldr批量匯入匯出資料測試SQL
- sqlldr批次匯入匯出資料測試SQL
- SQLServer資料庫中建立臨時表SQLServer資料庫
- HTAP資料庫PostgreSQL場景與效能測試之34-(OLTP+OLAP)不含索引單表單點寫入資料庫SQL索引
- 測試資料
- 大資料測試與 傳統資料庫測試大資料資料庫
- 電商類的 BI 報表和數倉資料需要怎麼測試呢,測試用例需要怎麼編寫呢
- 用Navicat把SQLServer資料匯入MySQLServerMySql
- Excel匯入Sqlserver資料庫指令碼ExcelSQLServer資料庫指令碼
- 測試TOM==SQLLDR載入固定格式資料SQL
- 測試TOM=SQLLDR使用函式載入資料SQL函式
- EXP,EXPDP資料匯入本地效能測試
- 表number列的資料插入insert小測試
- 功能測試之存量資料新與增資料測試
- Sqlserver delete表部分資料釋放資料檔案空間SQLServerdelete
- 基於PDF資料編寫PRD長文件測試案例
- 測試TOM=用PLSQL載入LOB型別資料SQL型別
- 如何透過C++ 將資料寫入 Excel 工作表C++Excel
- 把txt文字匯入sqlserver表內SQLServer
- 大資料包表如何進行自動化測試大資料