2016-08-01 174 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