繁体   English   中英

SQL Server如何插入百万行

[英]Sql server how to to inserting million rows

我在SQL Server中有一个300万行的source_table。 主键是内置的sql uniqueidentifier。

我想将所有300万行复制到4个表中:

Table1具有一些主要信息,例如uniqueidentifierbook_titlebook_authorbook_price Table2Table3Table4列将全部不同,但它们将具有与Table1相同的uniqueidentifier主键,并且该主键将成为Table1的uniqueidentifier主键的外键。

source_table复制需要很长时间,因为Table1Table2Table3Table4每一个都有5000万行。 它很慢,我想提高性能。 我的代码如下。 是否有人想提高性能一点点? 每天都要填充source_table,我必须重新插入Table1Table2Table3Table4

谢谢你的建议。

insert into Table1 values (UID, book_title, book_author, book_price)
select values (@UID, @title, @author, @price)
from source_table

insert into Table2 values (UID, col2, col3, col4)
select values (@UID, @col2value, @col3value, @col4value)
from source_table

insert into Table3 values (UID, col2, col3, col4)
select values (@UID, @col2value, @col3value, @col4value)
from source_table

尝试使用INSERT INTO…SELECT以最少的日志记录批量导入数据(请参阅MSDN文章

此语句的最少日志记录具有以下要求:

  • 数据库的恢复模型设置为简单或批量记录。
  • 目标表为空或为非空堆。
  • 在复制中不使用目标表。
  • 为目标表指定了TABLOCK提示。

     -- Temporarily set the recovery model to BULK_LOGGED. ALTER DATABASE MyDB SET RECOVERY BULK_LOGGED; GO -- You May have to drop the clustered index here INSERT INTO INTO Table1 WITH (TABLOCK) (UID, book_title, book_author, book_price) SELECT UID, title, author, price) FROM source_table -- RECREATE CLUSTERED INDEX HERE -- Reset the recovery model. ALTER DATABASE MyDB SET RECOVERY FULL; GO 

    ***现在进行完整备份

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM