Как уменьшить нагрузку на базу mysql?

Рейтинг: 0Ответов: 1Опубликовано: 23.02.2023

У меня есть порядка 150 000 строк которые нужно вставлять (insert) в базу данных mysql.

Сейчас я делаю insert на каждую строку, то есть получается 150 000 запросов идет. В итоге я получаю зависание приложения, и ошибки too many connections

в настройках mysql max connections = 150, увеличить тоже не вариант, потому что серверу не хватит ОЗУ и он упадет...

Можно ли как-то делать один insert и в него передавать все строки?

Фрагмент кода моего php скрипта:

$mysqli = new mysqli("localhost", 'base', 'pass', 'user');
$mysqli->query("SET NAMES 'utf8'");
if ($mysqli->connect_errno) {
    printf("Не удалось подключиться к базе данных: %s\n", $mysqli->connect_error); exit();
}

foreach ($arr as $key => $v) {
    $mysqli->query("INSERT IGNORE INTO `table` (`row1`, `row2`) VALUES ('$v[val1]', '$v[val2]')");
    $id = mysqli_insert_id($mysqli);
}

Ответы

▲ 2

Сформируйте запрос таким образом:

INSERT INTO table VALUES (1,2), (5,5), ...;

Здесь в скобках указываются данные каждой строки, которую нужно вставить.