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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

<?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 наблюдается небольшое увеличение скорости от использования этого скрипта в процедуре mysql или mysqli? При тестировании вышеприведенного сценария я получаю .0009 секунд последовательно больше, чем при использовании другого 2. При использовании mysql или mysqli процедур я загружал скрипты 20x в каждом различном стиле, и они всегда были выше .001. Я загружаю вышеуказанный скрипт 20x, и я становлюсь ниже .001 5x.

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

Если вы SELECT * FROM users WHERE ID=$user_id заявления, которые вы управляете собой, как 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 .