【问题标题】:Fastest transfer of data from MSSQL to MySQL via PHP通过 PHP 最快地将数据从 MSSQL 传输到 MySQL
【发布时间】:2013-09-03 18:37:51
【问题描述】:

我需要将远程 MS SQL 数据库中的数据存储到本地 MySQL 数据库中;我需要使用 PHP 来做到这一点。

从 MSSQL 中获取数据非常简单:

SELECT orderRef
     , orderValue
  FROM remoteTbl

这会产生 100k 行。我想使用 PHP 将其存储在本地 MySQL 数据库中。很简单,我可以(加上我想要的另一个字段):

while(list($orderRef, $orderValue) = mssql_fetch_array($result)){

mysql_query("INSERT INTO localTbl (orderRef, orderValue, updated)
                           VALUES ('$orderRef', '$orderValue', NOW())");

} // done all rows

不过,这对于 10 万行数据来说似乎很浪费。

有什么方法可以更有效地做到这一点吗?

  • 进一步更新到 cmets:

  • 也许通过使用 MSSQL 查询中的 PHP 资源? 我需要处理数据,而 MSSQL DBMS 是只读的。

谢谢

【问题讨论】:

  • 为什么需要将这些转移到您的数据库中?
  • @FreshPrinceOfSO 我很欣赏这个建议和 URL,但出于各种原因,我需要通过 PHP 来完成。
  • @ChristopherMorrissey 因为我需要处理数据并且 MSSQL DBMS 是只读的。

标签: php mysql sql sql-server


【解决方案1】:

您可能应该使用 mysqli,因为 mysql 函数将不再存在,但为了加快速度,您可以像这样执行一个大的插入语句。

$sql = "INSERT INTO localTbl (orderRef, orderValue, updated) VALUES ";

while(list($orderRef, $orderValue) = mssql_fetch_array($result)){

    $sql_rows[] = "('$orderRef', '$orderValue', NOW())";

}

mysql_query($sql . implode(',', $sql_rows) . ';');

【讨论】:

  • 太好了,谢谢!我没有想过从结果中构建一个查询——这也是一种非常优雅的方式,使用数组和内爆。是的,我知道我应该使用 mysqli……也许这将是这个特定项目的第一个领域!
  • 如果有 100K 行,我会想象你这样做会耗尽内存。
  • @troelskn 很有趣。可能有超过 100k 行,而且有时我可能需要提取更多列。是否有另一种方法,或者我是否仅限于根据需要简单地对行进行交互?这不是问题,因为它是 LAMP 服务器上的本地 DBMS,它会飞过。只是看起来不优雅。
  • 你可以在你的while循环中添加counter ...和if($counter == 100){ mysql_query($sql . implode(',', $sql_rows) . ';'); unset($sql_rows); $counter = 0; } $counter++;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-15
  • 2015-05-18
  • 1970-01-01
相关资源
最近更新 更多