我有一个 PHP 项目,我必须在 SQL 表中插入超过 10,000 行。这些数据从一个表中取出并检查一些简单的条件,并在每个月底插入到第二个表中。
我该怎么做。
我认为需要进一步澄清。我目前使用 PHP cronjob 进行小批量(250 个插入)传输,它工作正常。但我需要这样做是最合适的方法。
什么是最合适的。
- 我目前使用的带有 PHP 的 Cronjob
- 导出到文件和 BULK 导入方法
- 某种存储过程直接传输
或任何其他。
我有一个 PHP 项目,我必须在 SQL 表中插入超过 10,000 行。这些数据从一个表中取出并检查一些简单的条件,并在每个月底插入到第二个表中。
我该怎么做。
我认为需要进一步澄清。我目前使用 PHP cronjob 进行小批量(250 个插入)传输,它工作正常。但我需要这样做是最合适的方法。
什么是最合适的。
或任何其他。
由于数据量大,制作500条记录的批次进行处理。
检查这 500 批的情况,到那时,准备另一批 500 并插入第一批并进行处理。
这不会给您的 sql 服务器带来负担。
通过这种方式,我每天处理 40k 条记录。
使用BULK INSERT - 它专为满足您的要求而设计,并显着提高了插入速度。
此外,(以防万一您确实没有索引)您可能还需要考虑添加索引 - 一些索引(大多数是主键上的索引)可能会提高插入的性能。
您应该能够插入记录的实际速率将取决于确切的数据、表结构以及 SQL 服务器本身的硬件/配置,所以我真的不能给您任何数字。
很简单,你可以使用多个 while 来完成,因为 10000 行并不是巨大的数据!
$query1 = mssql_query("select top 10000 * from tblSource");
while ($sourcerow = mssql_fetch_object($query1)){
mssql_query("insert into tblTarget (field1,field2,fieldn) values ($sourcerow->field1,$sourcerow->field2,$sourcerow->fieldn)");
}
这应该可以正常工作
SQL Server 不会在单个批次中插入超过 1000 条记录。您必须为插入创建单独的批次。在这里,我建议一些对您有帮助的替代方案。
创建一个存储过程。创建两个临时表,一个用于有效数据,另一个用于无效数据。一项一项地检查您的所有规则和验证,并根据将数据插入到这两个表中。
如果数据有效,则插入有效的临时表,否则插入无效的临时表。
现在,接下来使用合并语句,您可以根据您的要求将所有数据插入到源表中。
您可以在表之间传输 N 条记录,所以我希望这对您来说没问题
谢谢。