使用"选择INTO"百万条记录

时间:2016-06-22 03:51:12

标签: sql sql-server performance

我使用SELECT INTO语句创建我的SQL语句结果。

SELECT fields
    INTO [newtable]
    FROM table1, table2, table3, table4
    [where clause to filter records from four tables]

我想知道如果有数百万条记录要插入到新表中,这句话将如何影响性能。在这种情况下是否会出现OutOfMemory错误?

我的环境是SQL Server 2008 R2。

4 个答案:

答案 0 :(得分:0)

在传输数据时,它不会将数据存储在内存中,因此不会出现内存问题。 当您创建数百万行时,日志记录和IO性能将受到影响。如果您的选择语句中的连接很复杂,那么性能会降级(如果单独选择需要很长时间,那么插入将更长)

答案 1 :(得分:0)

SELECT INTO通常用于生成临时表或复制另一个表(数据和/或结构)。

SELECT INTO通常是更好的表现,因为它是minimally logged

答案 2 :(得分:0)

使用下表中的必要字段创建temp table 例如:

create table #temp_data
(
empid int,
emp_name varchar(50),
strt_date datetime,
emp_addrss varchar(50),
emp_sal numeric
)

接下来,将四个表中的日期插入到以下列中,并满足必要的条件。

insert #temp_data values
(
001,'raj','2013-04-03','hyderabad',25000
)
Update 
update #temp_data
(
empid,emp_name,strt_date,emp_address,emp_sal
)

现在根据您的要求使用where clause和所有

编写查询
select 
empid,emp_name,strt_date,emp_addrss,emp_sal
from #temp_data
where empid = 001

溶胶:

empid   emp_name      strt_date         emp_addrss  emp_sal
1        raj    2013-04-03 00:00:00.000 hyderabad   25000

答案 3 :(得分:0)

  

在这种情况下会出现OutOfMemory错误吗?

  1. SQL Server将猜测您要插入多少条记录。然后它会向操作系统询问这么多内存,希望能避免出现内存不足的情况。
  2. 如果SQL Server没有足够的内存,或者它要求的内存太少,它会暂时将多余的数据存储在TempDB中。顾名思义,TempDB是一个存在于磁盘上的临时数据库。 https://msdn.microsoft.com/en-us/library/ms190768.aspx
  3. 为确保良好的性能,请在数据库服务器上放置尽可能多的RAM。
  4. 为确保良好的性能,请将TempDB放在自己的硬盘上。并确保你购买SSD硬盘驱动器,而不是廉价的旋转器。
  5. 如果查看SQL Server Management Studio中的执行计划,可以查看详细信息,例如查询使用的内存量。 http://www.developer.com/db/understanding-a-sql-server-query-execution-plan.html
  6. 如果使用的SQL Server内存与它要求的内存非常不同,那么您的统计信息可能已过期。 (搜索" SQL Server统计信息"了解更多信息。)