2014年2月3日月曜日

SQL Server 1000万件のデータ追加

SQL Server 1000万件のデータを追加するサンプル


USE kiyo
CREATE TABLE t1
 ( a int IDENTITY(1, 1) PRIMARY KEY
 , b int
 , c char(200) DEFAULT 'dummy1'
 , d char(200) DEFAULT 'dummy2' )
--↓の処理は32分かかります。1000万件INSERTは32分・・・遅くない?
SET NOCOUNT ON
DECLARE @i int = 1, @b int = 1
WHILE @i <= 10000000
 BEGIN
 IF @i % 10000 = 0 SET @b = @i
 INSERT INTO t1(b) VALUES(@b)
 SET @i += 1
 END
SET NOCOUNT OFF
--Cool!
SET STATISTICS TIME ON
--Cool!
SET STATISTICS IO ON
--1秒で終わる
SELECT b, MAX(a) FROM t1(nolock)
 GROUP BY b
/*
SQL Server の構文解析とコンパイルの時間:
 CPU 時間 = 0 ミリ秒、経過時間 = 0 ミリ秒。
(1001 行処理されました)
テーブル 'Worktable'。スキャン回数 0、論理読み取り数 0、物理読み取り数 0、先行読み取り数 0、LOB 論理読み取り数 0、LOB 物理読み取り数 0、LOB 先行読み取り数 0。
テーブル 't1'。スキャン回数 5、論理読み取り数 528279、物理読み取り数 0、先行読み取り数 0、LOB 論理読み取り数 0、LOB 物理読み取り数 0、LOB 先行読み取り数 0。
 SQL Server 実行時間: CPU 時間 = 4694 ミリ秒、経過時間 = 1285 ミリ秒。
*/

-- 上位 10万件を確認
--SELECT TOP 100000 * FROM t1 (nolock)

begin tran
--1000万件の更新は1分39秒と遅い
update t1 set c = 'hogehoge', d = 'uriuri'
/*
SQL Server の構文解析とコンパイルの時間:
 CPU 時間 = 0 ミリ秒、経過時間 = 2 ミリ秒。
SQL Server の構文解析とコンパイルの時間:
 CPU 時間 = 0 ミリ秒、経過時間 = 0 ミリ秒。
 SQL Server 実行時間: CPU 時間 = 13744 ミリ秒、経過時間 = 99520 ミリ秒。
(10000000 行処理されました)
*/
SELECT TOP 100000 * FROM t1 (nolock)
--1000万件の更新をロールバックする時間は、
rollback tran


0 件のコメント:

コメントを投稿