php mysql选择在同一服务器上的不同DB上插入

时间:2015-06-22 18:08:35

标签: php mysql insert-into

我在同一台服务器上有两个DB。 db1中的table1有11列,大约有800万行数据。我想在db2中的table2中插入四列值的table1数据(即4列x 800万行)。

我在下面的脚本中尝试使用php,首先选择db1.table1中的所有内容,然后将结果插入while循环中。

但是 - 根据插入10,000行的实验(花了7分钟),我认为将所有800万行放入db2.table2需要12个小时。我的方法效率极低,但看看:

<?php

   ///////////  set up connections to db1 and db1
$link = new mysqli('localhost', 'root', '', 'db1');

/////////// query to get data from db1/table1 
$sql1 = "select * from db1.table1";
$sql1_result = mysqli_query($link, $sql1) or die ("sql1 failed: " . mysqli_error());

/////////// turn data from db1.table1 into php variables
        while ( $row = mysqli_fetch_assoc($sql1_result))
    {   
            extract($row);// gives 8 million rows, each containing 11 pieces of data

/////////// connect to database db2 
$link->select_db('db2');

/////////// put query results into db2
$sql2 = "insert ignore into db2.table2  (field4, field5, field6, field7)
values ('$field4', '$field5', '$field6', '$field7')";
$sql2_result = mysqli_query($link, $sql2) or die ("sql2 failed: " . mysqli_error()); 
}
?>

经过研究,我想知道INSERT INTO SELECT是否会更快更高效,但我无法弄清楚如何处理这两个数据库连接。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

如果您的连接具有两个数据库的权限,则无需具有两个连接。数据库连接是与服务器的连接,而不是与特定数据库的连接(尽管您可以在连接中选择默认数据库)。

您可以做的是在一个连接中正常INSERT INTO SELECT:

insert ignore into db2.table2  (field4, field5, field6, field7)
select field4, field5, field6, field7
from db1.table1;

这样,执行在数据库服务器中完成,无需将数据移动到PHP(并返回)。