2016-08-01 28 views
1

Ich habe zwei Abfragen. erste ist:Leistungsunterschied zwischen INSERT INTO-Tabelle SELECT und SELECT INTO-Tabelle

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) 

weitere Abfrage ist:

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) 

erste Abfrage nimmt etwa 5 Minuten auszuführen, während zweite wird 3 Sekunden für die gleiche Anzahl von Datensätzen unter (etwa 2500). Können Sie mir bitte sagen, warum es in beiden Fragen einen Unterschied gibt?

Ich weiß, wo Sie beide Abfragen verwenden, nur neugierig, warum der erste zu viel Zeit braucht.

Ich muss jeden Datensatz aus der Tabelle Tabelle validieren. Gibt es eine Alternative zu Schleifen und Cursorn?

+0

Indizes auf vorhandene Tabelle? –

+0

Eigentlich möchte ich wissen, warum die erste Abfrage dauert mehr Zeit.Ist nicht doppelte Frage, ich habe bereits durch diese Frage gegangen. – gkarya42

+0

Post Execution Plan für beide Abfragen, idealerweise in auswählen sollte etwas länger dauern, da es Metadaten alle Sachen – TheGameiswar

Antwort

0

Ich nehme den Leistungsunterschied wegen der Loggings und Tabellenkonfigurationen an.

Wählen Sie INTO: Das select in erstellt eine Tabelle mit minimaler Konfiguration, hinterlässt die Indizes und Trigger (falls vorhanden) und kopiert die Informationen in die Zieltabelle.

Einfügen in: Die Einfügung ist für eine Tabelle gültig, die bereits existiert. Die Tabelle ist möglicherweise nicht so einfach wie In Konfiguration auswählen.

+0

Vorhandene Tabelle ist die flache Tabelle, ohne Primärschlüssel oder Index. – gkarya42