2016-08-01 134 views
1

我有兩個查詢。 第一個是: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) 

首先查詢花費約5分鐘,同時第二個被服用3秒鐘的相同數量的記錄(2500左右)來執行。你能告訴我爲什麼這兩個查詢有差異。

我知道在哪裏使用這兩個查詢,只是好奇爲什麼第一個需要太多的時間。

我需要驗證表格中的每個記錄。有沒有其他選擇循環和光標。

+0

現有表上的索引? –

+0

其實我想知道爲什麼第一個查詢需要更多time.Its不重複的問題,我已經經歷了這個問題。 – gkarya42

+0

這兩個查詢的執行後計劃,理想情況下,select into應該花費一些時間,因爲它已經創建了所有元數據的元數據 – TheGameiswar

回答

0

由於日誌和表格配置,我假設性能有差異。

選擇INTO:select into使用最小配置創建一個表,並留下索引和觸發器(如果有)並將信息複製到目標表。

插入到:插入到適用於已經存在的表。該表可能不如「選擇進入」配置那麼簡單。

+0

現有表格是扁平表格,沒有任何主鍵或索引。 – gkarya42