我正在尝试从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需要很长时间,我买不起。 是什么导致代码需要这么长时间才能工作?它是“INSERT IGNORE”吗? 有什么方法可以让我更快地做到这一点吗?
答案 0 :(得分:4)
由于数据库位于同一台服务器上,您可以简单地使用INSERT ... SELECT
(这样可以避免将数据带入PHP并循环遍历结果,为每个数据库执行单独的数据库命令,因此将是相当更快):
INSERT INTO db2.country (Name) SELECT country FROM db1.link
答案 1 :(得分:1)
您可以尝试在表格链的“国家/地区”列上创建索引。