3分クッキング cross join で1000万レコードを生成

SQL の cross join （直積）を使って1000万件のレコードを作る実験をしてみます。
大量のレコードを短時間で作成したいときのために。

## 環境
OS：Windows 10 Home 64 ビット オペレーティング システム
CPU：Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz   1.80 GHz
RAM：16.0 GB
DB：Microsoft SQL Server 2012
(SQL Server Management Studio 11.0.2100.60)

## 下ごしらえ１
出力先テーブルを作っておく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/e0ccea1c-2637-ce12-9e13-05bed6d8a71a.png)

```
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[Table_ABCDEFG](
	[A] [nvarchar](50) NOT NULL,
	[B] [nvarchar](50) NOT NULL,
	[C] [nvarchar](50) NOT NULL,
	[D] [nvarchar](50) NOT NULL,
	[E] [nvarchar](50) NOT NULL,
	[F] [nvarchar](50) NOT NULL,
	[G] [nvarchar](50) NOT NULL,
 CONSTRAINT [PK_Table_ABCDEFG] PRIMARY KEY CLUSTERED 
(
	[A] ASC,
	[B] ASC,
	[C] ASC,
	[D] ASC,
	[E] ASC,
	[F] ASC,
	[G] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
```

## 下ごしらえ２
入力用の7テーブル（Table_A, Table_B, ... , Table_G）を作り、それぞれ10レコードのデータを用意する。

Table_A の場合はこんな感じです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/c0d12edb-f584-7f96-5719-be0f01edbff8.png)

```
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[Table_A](
	[A] [nvarchar](50) NOT NULL
) ON [PRIMARY]

GO
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/5a5fdbe5-277e-4ae8-0c86-a34b1ee29768.png)

Table_G の場合はこんな感じです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/98bc6a53-b6f9-0afa-c6a5-f960302e089c.png)

```
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[Table_G](
	[G] [nvarchar](50) NOT NULL,
 CONSTRAINT [PK_Table_G] PRIMARY KEY CLUSTERED 
(
	[G] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/cbc137f9-2bea-c6f1-b106-cbe4a4fd76c4.png)

これで下ごしらえができました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/b7d26ef8-c185-086c-a53b-13b602ae5207.png)

## お試しクッキング

1000万件を取得するためのSQLを実行してみます。
1分17秒で終了しました。

```
select A.A, B.B, C.C, D.D, E.E, F.F, G.G
from Table_A A
cross join Table_B B
cross join Table_C C
cross join Table_D D
cross join Table_E E
cross join Table_F F
cross join Table_G G
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/5435f677-7768-bc9d-1802-74135aebfb2b.png)
（中略）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/bd520031-41f7-45d4-f647-22f3b05ddc80.png)

## 本番クッキング
テーブル Table_ABCDEFG に出力させてみます。
2分56秒で終了しました。

```
insert into Table_ABCDEFG (A, B, C, D, E, F, G)
select A.A, B.B, C.C, D.D, E.E, F.F, G.G
from Table_A A
cross join Table_B B
cross join Table_C C
cross join Table_D D
cross join Table_E E
cross join Table_F F
cross join Table_G G
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/c09c1b19-9246-b831-775d-e5454572a055.png)

10 x 10 x 10 x 10 x 10 x 10 x 10 = 10000000
のレコードが生成されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/42295701-e56b-0459-3287-8bdc4fb92ddb.png)