Я пытаюсь читать из базы данных в 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