Я наконец перехожу на mysqli.
Однако я заметил существенную разницу в производительности.
У меня есть скрипт, который делает около 25 000 запросов.
Скрипт занимает 15 секунд с mysqli и mysqlnd в качестве драйвера
И 10 секунд с MySQL и старой клиентской библиотекой MySQL.
Необработанное время SQL составляет 7,7 секунды в обоих сценариях.
Это должно быть время соединения между PHP и MySQL, которое определяет разницу.
MySQL медленнее, чем старый MySQL?
Я обнаружил разницу в производительности в процессе подключения.
Я записываю время в этих скриптах. И разница во времени составляет около 4 секунд
function connect() {
$time_start = $this->microtime_float();
$this->link = mysql_connect($GLOBALS['DB_HOST'], $GLOBALS['DB_USER'], $GLOBALS['DB_PASS'])
or die ("Could not connect to DB\n");
mysql_select_db($GLOBALS['DB_NAME'])
or die("Could not select ".$GLOBALS['DB_NAME']."\n");
$time_end = $this->microtime_float();
$_SESSION["MySQLTimeConnection"] += ($time_end - $time_start);
}
function connect() {
$time_start = $this->microtime_float();
$this->link = mysqli_connect($GLOBALS['DB_HOST'], $GLOBALS['DB_USER'], $GLOBALS['DB_PASS'],$GLOBALS['DB_NAME'])
or die ("Kunne ikke få forbindelse til databasen ".$GLOBALS['DB_NAME']."\n");
$time_end = $this->microtime_float();
$_SESSION["MySQLTimeConnection"] += ($time_end - $time_start);
}
Да, для стандартных запросов mysqli
часто медленнее старого mysql
функции в PHP.
Увидеть http://af-design.com/blog/2009/01/30/php-mysql-vs-mysqli-database-access-metrics/ за один такой тест.
Однако есть два существенных момента:
1 — mysql
набор функций устарел и, вероятно, будет недоступен в какой-то момент, поэтому производительность не является проблемой.
2 — В вашем примере с 25 000 запросов вы, вероятно, могли бы изменить свой код, чтобы использовать подготовленные операторы (чего вы не можете сделать в mysql
) и сделать значительную экономию. В меньшем масштабе 1 или 2 запроса на страницу подготовленные операторы, вероятно, не повлияют на производительность, но в то же время вы наблюдаете потерю производительности mysqli
вероятно, не имеет значения в любом случае.
Других решений пока нет …