Автор оригинала: David Wong.
В этой статье описывается PHP-оптимизация пакетной работы mysql. Для вашей справки, детали следующие:
Создайте таблицу данных следующим образом:
create table optimization( id INT NOT NULL AUTO_INCREMENT, value VARCHAR(10) NOT NULL, PRIMARY KEY(id) );
Теперь существует бизнес-требование вставлять данные пакетами.
Давайте взглянем на следующий код:
После тестирования результаты выполнения приведенного выше кода выглядят следующим образом:
1,возбужденный: 7601.4348144531 мс
2,возбужденный: 7476,4270019531 мс
3,возбужденный: 7674.4387207031 мс
Среднее значение: 7584.100179036433 Мс
Давайте посмотрим на второй код:
getMessage();
}
$begin = microtime(true) * 1000;
$dbh->beginTransaction();
try {
$count = 100;
$sql = 'INSERT INTO `optimization` (id, value) VALUES ';
$sql_arr = array();
$sql_str = '';
for ($i = 0; $i < $count; $i++)
{
$sql_arr[] = ("('', $i)");
}
$sql_str = implode(',', $sql_arr);
$sql .= $sql_str;
$stmt = $dbh->prepare($sql);
$stmt->execute();
$dbh->commit();
} catch(Exception $e) {
$dbh->rollBack();
echo $e->getMessage() . '
';
}
$end = microtime(true) * 1000;
echo 'excuted : ' , ($end - $begin) , ' ms';
Результаты выполнения приведенного выше кода следующие:
1,возбужденный: 99,005859375 мс
2,возбужденный: 103.00610351562 мс
3,возбужденный: 68.00390625 мс
Среднее значение: 90,00528971354 Мс
##Из анализа видно, что пакетная вставка используется во втором коде, и эффективность повышена на 84% по сравнению с первым. Причины заключаются в следующем:
- При использовании первого кода, поскольку оператор MySQL выполняется в каждом цикле, PHP должен соединиться с MySQL, затем выполнить оператор MySQL, а затем отключиться. Это основная временная стоимость первого кода – ввода-вывода PHP и MySQL для сетевой передачи
- Первый код анализирует больше инструкций SQL
Поэтому во втором коде количество синтаксического анализа операторов SQL и количество соединений между PHP и MySQL уменьшаются за счет объединения операторов SQL для уменьшения затрат на ввод-вывод при передаче по сети.
Примечание: 1. Инструкции SQL ограничены по длине. Поэтому при объединении операторов SQL вы не должны превышать ограничение длины SQL, задав значение max_ allowed_ Пакет может быть изменен. Значение по умолчанию равно 1 м, а при тестировании-8 м.
## Резюме
При пакетной работе с базой данных (такой как: вставка, обновление, изменение) операторы SQL должны быть объединены и выполняться как можно чаще, а не выполняться в цикле по очереди.
Запишите большую ошибку, которую вы недавно совершили в проекте, и вы не сможете повторить ее снова. Я не замечал этого раньше. До сих пор я действительно участвую в корпоративном проекте и нахожу свою собственную ошибку после того, как босс указывает на мой код. Я научился.
Подробнее о содержании, связанном с PHP, заинтересованные читатели могут ознакомиться со специальной темой: Учебник по введению в работу с базой данных PHP + MySQL, краткое изложение навыков программирования баз данных PHP + mysqli, учебник по введению в объектно-ориентированное программирование PHP, энциклопедия навыков работы с массивами PHP, краткое описание использования строк PHP и краткое описание общих навыков работы с базами данных PHP
Я надеюсь, что эта статья поможет вам в программировании на PHP.
Оригинал: “https://developpaper.com/php-optimization-of-batch-operation-mysql-instance-analysis/”