1

我有一个 PHP 项目,我必须在 SQL 表中插入超过 10,000 行。这些数据从一个表中取出并检查一些简单的条件,并在每个月底插入到第二个表中。

我该怎么做。

我认为需要进一步澄清。我目前使用 PHP cronjob 进行小批量(250 个插入)传输,它工作正常。但我需要这样做是最合适的方法。

什么是最合适的。

  1. 我目前使用的带有 PHP 的 Cronjob
  2. 导出到文件和 BULK 导入方法
  3. 某种存储过程直接传输

或任何其他。

4

5 回答 5

3

使用插入SQL 语句。:^)

向 SQL Server 2012 中的表或视图添加一行或多行。有关示例,请参阅示例

使用 mssql_* 扩展的示例。

$server = 'KALLESPC\SQLEXPRESS';
$link = mssql_connect($server, 'sa', 'phpfi');
mssql_query("INSERT INTO STUFF(id, value) VALUES ('".intval($id)."','".intval($value)."')");
于 2013-04-17T05:04:04.457 回答
2

由于数据量大,制作500条记录的批次进行处理。

检查这 500 批的情况,到那时,准备另一批 500 并插入第一批并进行处理。

这不会给您的 sql 服务器带来负担。

通过这种方式,我每天处理 40k 条记录。

于 2013-04-17T05:05:58.057 回答
2

使用BULK INSERT - 它专为满足您的要求而设计,并显着提高了插入速度。

此外,(以防万一您确实没有索引)您可能还需要考虑添加索引 - 一些索引(大多数是主键上的索引)可能会提高插入的性能。

您应该能够插入记录的实际速率将取决于确切的数据、表结构以及 SQL 服务器本身的硬件/配置,所以我真的不能给您任何数字。

于 2013-04-17T05:05:25.630 回答
1

很简单,你可以使用多个 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)");
}

这应该可以正常工作

于 2013-04-17T05:22:14.003 回答
1

SQL Server 不会在单个批次中插入超过 1000 条记录。您必须为插入创建单独的批次。在这里,我建议一些对您有帮助的替代方案。

创建一个存储过程。创建两个临时表,一个用于有效数据,另一个用于无效数据。一项一项地检查您的所有规则和验证,并根据将数据插入到这两个表中。

如果数据有效,则插入有效的临时表,否则插入无效的临时表。

现在,接下来使用合并语句,您可以根据您的要求将所有数据插入到源表中。

您可以在表之间传输 N 条记录,所以我希望这对您来说没问题

谢谢。

于 2013-04-17T08:23:39.740 回答