2016-12-14 7 views
4

空のテーブルに他のテーブルのselectの結果を挿入するクエリを作成しました。Select Performance From SQL Server

これは自体を選択〜1時間を取るに〜20分かかる(30 M行、120列と "" の条件を、そしてそれは大丈夫です)、しかし挿入

改善方法のご提案はありますか?

私が行ったことは、以下の例のようです。

Insert Into tableA 
Select * 
From TableB 

あなたの助けをお待ちしております。

答えて

2

ドロップTableA上のすべてのインデックス、再度挿入します

INSERT INTO tableA 
SELECT * FROM TableB 

インデックスは、挿入文を遅くすることが知られています。

+0

私はそれを行っています。しかし、それを挿入するにはまだ1時間かかります。 –

+0

あなたはどんなrdbmsを使用していますか? MySQLまたはSQL Server? @Ric_R – sagi

+0

SQL Server。ありがとう –

0

上記のインデックスの下では、制約がインデックスで実装されることが多いため、TableAに制約が定義されているかどうか(主キー、外部キーなど)を確認できます。

また、TableAにトリガがあるかどうかを確認できます。 別のテストは、TableBをファイルにエクスポート/アンロードすることです。 TableB.txtファイルを開き、TableB.txtファイルをTableAにインポート/ロードします。 (申し訳ありませんが、SQL Serverの構文は分かりません)。

もう1つの確認項目は、トランザクションログです。 BULK_LOGGEDにログを変更することはおそらく可能です: Disable Transaction Log

+0

制約とトリガは、 'SELECT '。制約とトリガはDMLイベント(INSERT、UPDATE、DELETE)でのみ実行されます。 –