0

我正在尝试从 MySQL 中的数据库中读取数据并将我的数据插入 MySQL 中的另一个数据库中。

我的第一张桌子是这样的

CREATE TABLE IF NOT EXISTS `link` (
  `_id` bigint(20) NOT NULL AUTO_INCREMENT,
  `country` varchar(30) COLLATE utf8 DEFAULT NULL,
  `time` varchar(20) COLLATE utf8 DEFAULT NULL,
  `link` varchar(100) COLLATE utf8 DEFAULT NULL,
  PRIMARY KEY (`_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=6149 ;

第二张桌子是

CREATE TABLE IF NOT EXISTS `country` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `Name` varchar(15) CHARACTER SET utf8 NOT NULL,
  `Logo` varchar(50) CHARACTER SET utf8 DEFAULT NULL,
  PRIMARY KEY (`ID`),
  UNIQUE KEY `Name_3` (`Name`),
  UNIQUE KEY `ID` (`ID`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=8457 ;

第一个表中有大约 6114 行我试图使用此代码插入到第二个表中

<?php

$tmp = mysqli_connect(******, *****, ****, *****); // First table in here

if (mysqli_connect_errno()) {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$main = mysqli_connect(*****, *****, ****, ******); //Second table in here

if (mysqli_connect_errno()) {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$req = "SELECT country  FROM link";
$result = mysqli_query($tmp, $req) or die( mysqli_error($tmp) );

echo "-> ".mysqli_num_rows($result)."<br>";

while ($row = mysqli_fetch_array($result)) {
    $con = $row["country"];

    $req = "INSERT IGNORE INTO country (Name) VALUES ('$con')";
    mysqli_query($main, $req) or die( mysqli_error($main) ) ;

}
?>

问题是 php 代码有效,但 6114 需要很长时间,我买不起。是什么导致代码需要这么长时间才能工作?是“插入忽略”吗?有什么办法可以让我更快地做到这一点?

4

2 回答 2

5

由于数据库在同一台服务器上,您可以简单地使用INSERT ... SELECT(这避免了必须将数据带入 PHP 并循环为每个数据库执行单独的数据库命令的结果,因此会快得多):

INSERT INTO db2.country (Name) SELECT country FROM db1.link
于 2013-07-19T10:29:27.607 回答
1

您可以尝试在表链接的“国家”列上创建索引。

于 2013-07-19T10:42:29.793 回答