移行プロジェクトの一環として、JDEiSeriesDB2データベースからデータをインポートしました。宛先テーブルを作成してデータをインポートするために、SSISパッケージが作成されました。インポートは正常に行われました。
ここで問題が発生します-顧客は、宛先DB(SQL 2008 R2)で作成された主キーを望んでいます。この場合の問題のテーブルは、104列と750万行のデータを持つ1つのテーブルになります。このテーブルに必要なPKは複合であり、7つの列があります。
私たちはこれを検討しています:
BEGIN TRANSACTION
GO
ALTER TABLE [dbo].[F0911] ADD CONSTRAINT [F0911_PK] PRIMARY KEY CLUSTERED
(
[GLDCT] ASC,
[GLDOC] ASC,
[GLKCO] ASC,
[GLDGJ] ASC,
[GLJELN] ASC,
[GLLT] ASC,
[GLEXTL] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
COMMIT
またはこれ:
-- Rename existing tables
sp_RENAME '[F0911]' , '[F0911_old]'
GO
-- Create new table
SELECT * INTO F0911 FROM F0911_old WHERE 1=0
GO
--Create PK constraints
ALTER TABLE [dbo].[F0911] ADD CONSTRAINT [F0911_PK] PRIMARY KEY CLUSTERED
(
[GLDCT] ASC,
[GLDOC] ASC,
[GLKCO] ASC,
[GLDGJ] ASC,
[GLJELN] ASC,
[GLLT] ASC,
[GLEXTL] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
--Insert data into new tables
INSERT INTO F0911
SELECT * FROM F0911_old
GO
-- Drop old tables
DROP TABLE F0911_old
GO
パフォーマンスの観点から、どちらがより効率的なアプローチでしょうか?私は両方とも同じであり、最初のアプローチでさえ、暗黙のうちに2番目のアプローチと同じことをするという直感を持っています。この理解は正しいですか?
これらの列はすべてテーブルにすでに存在しており、テーブル定義を変更できないことに注意してください。
ありがとう、ラジ