我想從MySQL中的數據庫中讀取數據,並將數據插入到MySQL中的其他數據庫中。MySQL和INSERT IGNORE
我的第一個表是這樣的
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需要很長的時間,我不能相關rd。 什麼導致代碼需要這麼長時間才能工作?它是「INSERT IGNORE」嗎? 有什麼辦法可以做得更快?
這些數據庫在同一臺服務器上嗎?如果是這樣,你有沒有考慮過['INSERT ... SELECT'](http://dev.mysql.com/doc/en/insert-select.html)? – eggyal
是的數據庫在同一臺服務器上,不,我沒有,比「INSERT IGNORE」更快嗎? – N3mo
'IGNORE'不會加快速度(也可以與'INSERT ... SELECT'一起使用) - 它只是忽略插入過程中發生的任何錯誤。 – eggyal