Лучший способ вставить несколько строк в базу данных MySQL

Итак, у меня есть несколько txt файлы, каждый контейнер около 400 000 строк.

Каждая строка — это слово, которое мне нужно добавить в свою базу данных, если его там еще нет.

В настоящее время мой код для проверки / добавления каждого слова

$sql = mysql_sql("SELECT `id` FROM `word_list` WHERE `word`='{$word}' LIMIT 1");
$num = mysql_num($sql);
if($num == '0'){
$length = strlen($word);
$timestamp = time();
@mysql_sql("INSERT INTO `word_list` (`word`, `length`, `timestamp`) VALUES ('{$word}', '{$length}', '{$timestamp}')");
}

и вызываемые функции:

function mysql_sql($sql){
global $db;

$result = $db->query($sql);

return $result;
}
function mysql_num($result){
return $result->num_rows;
}

Я ищу лучший способ вставить каждое слово в базу данных.

Любые идеи очень приветствуются.

1

Решение

Я могу придумать несколько способов сделать это.

Во-первых, если у вас есть доступ к файловой системе сервера MySQL, вы можете использовать LOAD DATA INFILE чтобы создать новую таблицу, затем выполните вставку из этой новой таблицы в таблицу word_list. Скорее всего, это будет ваш самый быстрый вариант.

Во-вторых (если у вас нет доступа к файловой системе сервера MySQL), поместите первичный ключ или уникальный индекс в word_list.word, Тогда избавься от своего SELECT запрос и использование INSERT IGNORE INTO word_list ..., Это позволит MySQL автоматически пропускать дубликаты без необходимости выполнения операции запрос / вставка.

В-третьих, если ваша таблица использует метод доступа, который обрабатывает транзакции (InnoDB, а не MyISAM), введите BEGIN; заявление, прежде чем начать свой цикл вставки. Тогда каждую пару сотен строк выдают COMMIT;BEGIN; , Тогда в конце выпуска COMMIT;, Это обернет ваши операции в многострочные транзакции, что значительно ускорит процесс.

1

Другие решения

Попробуйте этот код. Сначала он создаст запрос со всеми вашими значениями, и вы выполните запрос только ОДНАЖДЫ … Не снова и снова навсегда

$values = array();

$sql = mysql_sql("SELECT `id` FROM `word_list` WHERE `word`='{$word}' LIMIT 1");
$num = mysql_num($sql);

$insert_query = "INSERT INTO `word_list` (`word`, `length`, `timestamp`) VALUES ";

if ($num == '0') {
$length = strlen($word);
$timestamp = time();
$values[] = "('$word', '$length', '$timestamp')";
}

$insert_query .= implode(', ', $values);

@mysql_sql($insert_query);
0

По вопросам рекламы [email protected]