Рубрики
Uncategorized

PHP оптимизация пакетной работы Анализ экземпляра MySQL

Автор оригинала: David Wong.

В этой статье описывается PHP-оптимизация пакетной работы mysql. Для вашей справки, детали следующие:

Создайте таблицу данных следующим образом:

create table optimization(
  id INT NOT NULL AUTO_INCREMENT,
  value VARCHAR(10) NOT NULL,
  PRIMARY KEY(id)
);

Теперь существует бизнес-требование вставлять данные пакетами.

Давайте взглянем на следующий код:

php
  $dsn = 'mysql:dbname=test;host=127.0.0.1';
  $user = 'root';
  $password = 'root';

  try {
    $dbh = new PDO($dsn, $user, $password);
  } catch(PDOException $e) {
    echo 'Connection failed: ' , $e->getMessage();
  }
  $begin = microtime(true) * 1000;

  $count = 100;
  $stmt = $dbh->prepare('INSERT INTO `optimization` (id, value) VALUES(:id, :value)');
  $stmt->bindParam(':id', $id);
  $stmt->bindParam(':value', $value);
  for ($i = 0; $i < $count; $i++)
  {
    $id = '';
    $value = $i;
    $stmt->execute();
  }

  $end = microtime(true) * 1000;
  echo 'excuted : ' , ($end - $begin) , ' ms';

После тестирования результаты выполнения приведенного выше кода выглядят следующим образом:

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/”