2016-08-01 63 views
1

2つのクエリがあります。 まず一つは、次のとおりです。INSERT INTOテーブルSELECTとSELECT INTOテーブルのパフォーマンスの差

SELECT 
     Tbl.Col.value('ID[1]','INT') AS ID, 
     Tbl.Col.value('SPACE_CODE[1]', 'VARCHAR(100)') AS SPACE_CODE, 
     Tbl.Col.value('SPACE_TYPES[1]', 'INT') AS SPACE_TYPES, 
     Tbl.Col.value('IS_CORPORATE[1]', 'BIT') AS IS_CORPORATE, 
     Tbl.Col.value('IS_HOTELLING[1]', 'BIT') AS IS_HOTELLING, 
     Tbl.Col.value('AREA_NAME[1]', 'VARCHAR(50)') AS AREA_NAME, 
     Tbl.Col.value('OPERATION[1]', 'varchar(20)') AS OPERATION, 
     Tbl.Col.value('REMARKS[1]', 'varchar(200)') AS REMARKS, 
     CAST('' AS VARCHAR(20)) AS RESULT, 
     CAST('' AS VARCHAR(200)) AS COMMENTS 
     INTO #temp_space 
FROM @XML_Data.nodes('//row') Tbl(Col) 

別のクエリは次のとおりです。

CREATE TABLE #temp_space 
    (
    id int identity(1,1), 
    AREA_NAME VARCHAR(20), 
    IS_CORPORATE BIT, 
    IS_HOTELLING BIT, 
    OPERATION VARCHAR(20), 
    REMARKS VARCHAR(200), 
    SPACE_CODE VARCHAR(100), 
    SPACE_TYPES INT, 
    RESULT VARCHAR(20), 
    COMMENTS VARCHAR(100) 
    ) 
INSERT INTO #temp_space(SPACE_CODE ,SPACE_TYPES ,IS_CORPORATE ,IS_HOTELLING,AREA_NAME ,OPERATION ,REMARKS) 
SELECT 
     Tbl.Col.value('ID[1]','INT') AS ID, 
     Tbl.Col.value('SPACE_CODE[1]', 'VARCHAR(100)') AS SPACE_CODE, 
     Tbl.Col.value('SPACE_TYPES[1]', 'INT') AS SPACE_TYPES, 
     Tbl.Col.value('IS_CORPORATE[1]', 'BIT') AS IS_CORPORATE, 
     Tbl.Col.value('IS_HOTELLING[1]', 'BIT') AS IS_HOTELLING, 
     Tbl.Col.value('AREA_NAME[1]', 'VARCHAR(50)') AS AREA_NAME, 
     Tbl.Col.value('OPERATION[1]', 'varchar(20)') AS OPERATION, 
     Tbl.Col.value('REMARKS[1]', 'varchar(200)') AS REMARKS, 
     CAST('' AS VARCHAR(20)) AS RESULT, 
     CAST('' AS VARCHAR(200)) AS COMMENTS 
FROM @XML_Data.nodes('//row') Tbl(Col) 

最初のクエリは、第1は、(2500年前後)のレコードと同じ数の3秒を取っている間に実行するのに約5分を取っています。両方のクエリに違いがある理由を教えてください。

私は両方のクエリを使用する場所を知っています。なぜ最初のものが時間がかかりすぎるのか不思議です。

テーブルテーブルから各レコードを検証する必要があります。ループとカーソルの代替手段はありますか?

+0

既存のテーブルのインデックス? –

+0

実際、私は最初のクエリが時間がかかっている理由を知りたいと思っています。質問は重複しません。私はすでにその質問を終えました。 – gkarya42

+0

両方のクエリの実行後の計画、理想的に選択するには、すべてのものをメタデータを作成しているので、少し時間がかかるはずです – TheGameiswar

答えて

0

ロギングとテーブル構成のためにパフォーマンスの違いが発生すると想定しています。

INTOを選択:select intoは、最小限の構成でインデックスとトリガー(存在する場合)を残してテーブルを作成し、その情報をターゲットテーブルにコピーします。

Insert Into:insert intoは、既に存在するテーブルに適用できます。テーブルは、Select Into設定のように単純ではありません。

+0

既存のテーブルは、プライマリキーまたはインデックスのないフラットテーブルです。 – gkarya42

関連する問題