Я хотел бы знать, есть ли у кого-то из первых рук опыт этой дихотомии. Несколько блогов говорят, что расширение 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 .