[英]Sql server how to to inserting million rows
我在SQL Server中有一个300万行的source_table。 主键是内置的sql uniqueidentifier。
我想将所有300万行复制到4个表中:
Table1
具有一些主要信息,例如uniqueidentifier
, book_title
, book_author
, book_price
。 Table2
, Table3
和Table4
列将全部不同,但它们将具有与Table1
相同的uniqueidentifier
主键,并且该主键将成为Table1的uniqueidentifier
主键的外键。
从source_table
复制需要很长时间,因为Table1
, Table2
, Table3
和Table4
每一个都有5000万行。 它很慢,我想提高性能。 我的代码如下。 是否有人想提高性能一点点? 每天都要填充source_table,我必须重新插入Table1
, Table2
, Table3
和Table4
。
谢谢你的建议。
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.