次のスクリプトを使用して、AAA-0000からZZZ-0000までの範囲の 'ABC-1234'形式のユニークな英数字コード175万個(! 9999。AlphaNumericコードの大きなテーブルを作成するSQLスクリプトを高速化するには
私の専用MS SQL 2016ボックスでこのスクリプトをそのまま実行すると、20時間かかります。これをスピードアップする最善の方法は何ですか?スクリプトからわかるように、私のSQLスキルはいくぶん欠けています!
ID(int)列、ID、およびCODE(nvarchar(20))自体の列があります。
CREATE TABLE [dbo].[ORDERED_CODES](
[ID] [int] NOT NULL,
[Code] [nvarchar](20) NOT NULL,
CONSTRAINT [PK_ORDERED_CODES] PRIMARY KEY CLUSTERED
(
[ID] ASC,
[Code] 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
スクリプト:
DECLARE @Alpha1 INT;
DECLARE @Alpha2 INT;
DECLARE @Alpha3 INT;
DECLARE @Num INT;
-- alpha elements 'ABC'
SET @Alpha1 = 65;
SET @Alpha2 = 65;
SET @Alpha3 = 65;
-- number element '9999'
SET @Num = 0;
-- temporary holders
DECLARE @FINALCODE Nvarchar(50);
DECLARE @CODE1 Nvarchar(50);
DECLARE @CODE2 Nvarchar(50);
DECLARE @CODE3 Nvarchar(50);
WHILE @Alpha1 < 91
BEGIN
SET @CODE1 = CHAR(@Alpha1)
WHILE @Alpha2 < 91
BEGIN
SET @CODE2 = @CODE1 + CHAR(@Alpha2)
SET @Alpha2 = @Alpha2 +1
WHILE @Alpha3 < 91
BEGIN
SET @CODE3 = @CODE2 + CHAR(@Alpha3)
SET @Alpha3 = @Alpha3 +1
WHILE @Num < 10000
BEGIN
SET @FINALCODE = RIGHT('0000'+ CAST(@Num as nvarchar(4)),4) + CHAR(45) + @CODE3
SET @Num = @Num +1
INSERT INTO ORDERED_CODES (CODE) VALUES (@FINALCODE)
END
SET @FINALCODE = null
SET @Num = 0
END
SET @Alpha3 = 65
END
SET @Alpha2 = 65
SET @Alpha1 = @Alpha1 +1
END;
任意およびすべての思考がありがたく感謝している2つの列が主キーを構成します!
ゴードン、ダン&ジョンの助けを借りてくれてありがとう、すべて同じテーマですばらしい答えですので、悲しいことに私は答えとして1つを選択しなければならない...そう最高のSOの伝統ではゴードンに行く必要があります最初になるために。言うまでもなく、私はCTEを読み上げるつもりです!私のサーバでは4分ほどでDanのものが最も速かったです。私の太ったサーバーがデスクトップより5倍遅い理由を試してみる必要があります。 20時間をはるかに上回り、とても感謝しています。乾杯! –