Что быстрее в PHP-MySQL или MySQLi?

Я хотел бы знать, есть ли у кого-то из первых рук опыт этой дихотомии. Несколько блогов говорят, что расширение mysql быстрее, чем mysqli. Это правда?

И я только спрашиваю о скорости. Я знаю, что у mysqli есть функции, которых нет в более раннем расширении.

Ответ 1

Расширение MySQL очень немного быстрее, чем MySQLi в большинстве тестов, о которых я видел. Разница настолько незначительна, однако, что это, вероятно, не будет вашим критерием для решения между ними.

Другие факторы затмевают разницу в производительности между mysql и mysqli. Используя mod_php или FastCGI, кеш байт-кода, такой как APC, или использование кэширования данных разумно для уменьшения обращений к базам данных, гораздо более полезны для общей производительности PHP-скриптов, чем выбор расширения MySQL.

Не будь копейки мудрым и фунтом глупым!: -)

Ответ 2

"Это зависит".

Например, PHP MySQL против MySQLi Database Access Metrics, а последующие комментарии указывают на аргументы в обоих направлениях.

Если у вас есть зрелая база данных и база данных, выполните некоторые проверки и посмотрите, что работает в вашей системе. Если нет, перестаньте беспокоиться о преждевременной оптимизации.

Ответ 3

См. http://php.net/manual/en/mysqlinfo.api.choosing.php

Общая производительность всех трех расширений считается примерно одинаковой. Хотя производительность расширения вносит лишь часть общего времени выполнения веб-запроса PHP. Часто это воздействие достигает 0,1%.

Ответ 4

Возможно, это может быть причиной для правильного выбора: Сюжет Убить PHP MySQL Extension

"Да, вы правильно это прочитали. Недавно Филлип Олсон отправил в список рассылки внутренних дел PHP предложение убить исходное расширение PHP MySQL в будущих версиях PHP".

Ответ 5

В отношении языка программирования PHP MySQL является старым драйвером базы данных, а MySQLi - улучшенным драйвером. MySQLi использует новые возможности MySQL 5.

Особенности MySQLi, взятые с сайта php.net:

  • Объектно-ориентированный интерфейс
  • Поддержка подготовленных заявлений
  • Поддержка нескольких выражений
  • Поддержка транзакций
  • Расширенные возможности отладки
  • Поддержка встроенного сервера

Ответ 6

Согласно всем результатам Google для тестов, связанных с ceejayoz, похоже, что MySQL во всех тестовых тестах, по крайней мере, немного быстрее MySQLi. Я рекомендую прочитать результаты для деталей, но просто решил, что я опубликую что-то, что непосредственно ответит на вопрос, и натолкнется на ответ ceejayoz.

Ответ 7

Документация PHP имеет хорошее сравнение mysql, mysqli и PDO. Я знаю, что вы только спрашивали о скорости, но другие могут найти это полезным. В нем рассказывается о различиях функций между опциями.

Ответ 8

Если миллисекунды не имеют значения, тогда не беспокойтесь. Разумеется, если вам не нужна дополнительная функциональность, предоставляемая mysqli, тогда просто придерживайтесь проверенного и проверенного mysql.

Ответ 9

<?php
$start = microtime();
$c = new mysqli('localhost', 'username', 'userpass', 'username_dbname');
$c -> select_db('username_dbname');


$q = $c -> query("SELECT * FROM example");

while ($r = $q -> fetch_array(MYSQLI_ASSOC))
  {
  echo $r['col1'] . "<br/>\n";
  }

$me = $c -> query("SELECT col1 FROM example WHERE id='11'") -> fetch_array(MYSQLI_ASSOC);

echo $me['col1'];
echo (microtime() - $start);
?>

Почему при использовании mysqli oop наблюдается небольшое увеличение скорости от использования этого script с процедурным методом mysql или mysqli? При тестировании вышеприведенного script я получаю .0009 секунд последовательно больше, чем при использовании другого 2. При использовании mysql или mysqli процедур я загружал скрипты 20x в каждом различном стиле, и они всегда были выше .001. Я загружаю выше script 20x, и я становлюсь ниже .001 5x.

Ответ 10

MySQLi имеет два основных преимущества перед MySQL; подготовленные заявления - отличный способ избежать атак SQL-инъекций. Во-вторых, MySQL (или mariaDB) сделает все возможное, чтобы оптимизировать подготовленные заявления и, следовательно, у вас есть потенциал для оптимизации скорости там. Скорость увеличивается от того, чтобы сделать базу данных счастливой, значительно изменит крошечную разницу между MySQL и MySQLi.

Если вы подаете заявления, которые вы кажетесь вместе, как SELECT * FROM users WHERE ID=$user_id, база данных будет рассматривать это как уникальный оператор с каждым новым значением $user_id. Но подготовленный оператор SELECT * FROM users WHERE ID=? имеет гораздо более высокий шанс на то, что некоторые оптимизации/кэширование выполняются базой данных.

Но сравнения довольно спорны, поскольку MySQL теперь официально устарел. Из устья лошади:

Устаревшие функции в PHP 5.5.x

ext/mysql обесценивание

Исходное расширение MySQL теперь устарело и будет генерировать ошибки E_DEPRECATED при подключении к базе данных. Вместо этого используйте расширения MySQLi или PDO_MySQL.