我有一个PHP项目,我必须在SQL表中插入超过10,000行。这些数据来自一个表格,并检查了一些简单的条件,并在每个月末插入第二个表格。
我该怎么做。
我认为需要进一步澄清。我目前使用PHP cronjob传输小批量(250插入),它工作正常。但我需要这样做是最合适的方法。
什么是最合适的。
或任何其他。
答案 0 :(得分:3)
使用insert SQL语句。 :^)
在SQL Server 2012中向表或视图添加一行或多行。有关示例,请参阅Examples。
使用mssql_ *扩展名的示例。
$server = 'KALLESPC\SQLEXPRESS';
$link = mssql_connect($server, 'sa', 'phpfi');
mssql_query("INSERT INTO STUFF(id, value) VALUES ('".intval($id)."','".intval($value)."')");
答案 1 :(得分:2)
使用BULK INSERT - 它专为您所要求而设计,并显着提高插入速度。
另外,(以防你真的没有索引)你可能还想考虑添加一个索引 - 一些索引(大多数是主键上的索引)可以提高插入的性能。
您应该能够插入记录的实际速率取决于确切的数据,表格结构以及SQL服务器本身的硬件/配置,因此我无法真正给您任何数字。< / p>
答案 2 :(得分:2)
由于数据很大,请批量处理500条记录。
检查那500个批次的状况,到那时,准备另一批500并插入第一批等处理。
这不会给你的sql server加载负载。
通过这种方式我每天处理40k记录。
答案 3 :(得分: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)");
}
这应该可以正常工作
答案 4 :(得分:1)
SQL Server不会在一个批处理中插入超过1000条记录。您必须创建单独的批处理以进行插入。在这里,我建议一些可以帮助你的替代方案。
创建一个存储过程。为有效数据创建两个临时表,为无效数据创建另一个临时表。逐个检查所有规则和验证,并根据这两个表插入数据。
如果数据有效,则插入有效临时表,否则插入无效临时表。
现在,接下来使用merge语句,您可以根据您的要求将所有数据插入到源表中。
你可以在表之间传输N条记录,所以我希望这对你来说没问题
感谢。