2008-10-05 32 views
56

Me gustaría saber si alguien tiene alguna experiencia de primera mano con esta dicotomía. Algunos blogs dicen que la extensión mysql es más rápida que mysqli. ¿Es esto cierto?¿Cuál es el más rápido en PHP- MySQL o MySQLi?

Y solo estoy preguntando sobre la velocidad. Sé que mysqli tiene características que no están presentes en la extensión anterior.

Respuesta

3

De acuerdo con todos los resultados de Google para los puntos de referencia vinculados por ceejayoz parece que MySQL es al menos un poco más rápido que MySQLi en todas las pruebas de referencia. Recomiendo leer los resultados para más detalles, pero pensé que publicaría algo que respondía directamente a la pregunta y respondía a la pregunta de ceejayoz.

+0

enlace hacia abajo ...... – Pacerier

87

La extensión de MySQL es ligeramente más rápida que MySQLi en la mayoría de los puntos de referencia que he visto. La diferencia es tan leve, sin embargo, que probablemente este no sea su criterio para decidir entre los dos.

Otros factores empequeñecen la diferencia en el rendimiento entre mysql y mysqli. Usar mod_php o FastCGI, un caché de bytecode como APC, o usar caché de datos juiciosamente para reducir las visitas a la base de datos, es mucho más beneficioso para el rendimiento general de los scripts PHP que la opción de extensión MySQL.

¡No seas céntimo sabio y aporrees tonto! :-)

+28

+1 solo para la última línea. Amma robando eso! – Mathew

+1

¿Cuál es la mayor diferencia entre usar mysql y mysqli entonces? Me enseñaron a usar mysqli y nunca me dijeron por qué. ¿Podría darme una breve explicación? Gracias – Drewdin

+1

ext/mysqli admite más características de la API subyacente de MySQL, como transacciones y consultas preparadas con parámetros. También puede llamar a las funciones de mysqli de una manera orientada a objetos. –

3

La documentación de PHP tiene un buen comparison of mysql, mysqli, and PDO. Sé que solo preguntaste sobre la velocidad, pero a otros les puede resultar útil. Habla sobre las diferencias de características entre las opciones.

10

"Depende". Por ejemplo, PHP MySQL vs MySQLi Database Access Metrics y los comentarios posteriores señalan los argumentos en ambos sentidos

Si tiene una base de datos y código base maduros, realice algunas pruebas y vea qué funciona en su sistema. De lo contrario, deja de preocuparte por la optimización prematura.

2

A menos que milisegundos importen, no se preocupe. Sin duda, si no necesita la funcionalidad adicional proporcionada por mysqli, simplemente siga con el probado y probado mysql.

4

Tal vez, esto puede ser una razón para tomar la decisión correcta :: The Plot to Kill PHP MySQL Extension

"Sí, has leído bien. Recientemente, Phillip Olson enviado a las partes internas de PHP lista de correo de una propuesta para matar la extensión PHP MySQL original en futuras versiones PHP. "

+2

He probado. Para mí una extensión MySQL de edad es notable más rápido que la extensión mysqli –

+0

@Jeff_Alieffson Eso no es de mucha ayuda, sin dar algunas métricas comprobables – RiggsFolly

4

En relación con el lenguaje de programación PHP, MySQL es el controlador de base de datos anterior, y MySQLi es el controlador Mejorado. MySQLi aprovecha las características más nuevas de MySQL 5.

Características de MySQLi tomadas de php.sitio de la red:

  • interfaz orientada a objetos
  • Soporte para comandos preparados
  • soporte para comandos múltiples
  • Apoyo en transacciones
  • capacidades de depuración mejoradas
  • soporte de servidor Embedded
+8

No estoy seguro de por qué esto ha sido hasta-votado tantas veces. Estoy bajando la votación, ya que no responde la pregunta real. –

+3

La pregunta es sobre la velocidad, no sobre la belleza o las características adicionales. –

+0

supongo que esto es lo que nos debe importar, incluso si MySQL es 'un poco' más rápido del MySQLi, no voy a construir un sistema de MySQL Becuase tarde o temprano podría llegar a ser depricated, por lo tanto, volver a escribir todos sus sus motores db y los códigos relacionados ! –

6

Ver http://php.net/manual/en/mysqlinfo.api.choosing.php

El rendimiento general de las tres extensiones se considera aproximadamente el mismo. Aunque el rendimiento de la extensión contribuye solo una fracción del tiempo total de ejecución de una solicitud web PHP. A menudo, el impacto es tan bajo como 0.1%.

-2

MySQLi tiene dos ventajas básicas sobre MySQL; las declaraciones preparadas son una excelente manera de evitar los ataques de inyección SQL. En segundo lugar, MySQL (o mariaDB) hará todo lo posible para optimizar las declaraciones preparadas y, por lo tanto, tiene el potencial de optimizar la velocidad allí. La velocidad aumenta al hacer que la base de datos sea feliz va a sobredimensionar la pequeña diferencia entre MySQL y MySQLi.

Si está alimentando en las declaraciones que mangle juntos como SELECT * FROM users WHERE ID=$user_id la base de datos tratará esto como una declaración única con cada nuevo valor de $user_id. Pero una declaración preparada SELECT * FROM users WHERE ID=? tiene muchas más posibilidades de tener algunas optimizaciones/almacenamiento en caché realizadas por la base de datos.

Pero las comparaciones son bastante discutibles ya que MySQL es ahora oficialmente obsoleto. De la boca del caballo:

Características en desuso en PHP 5.5.x

ext/mysql desaprobación

La extensión original de MySQL está obsoleto, y generará E_DEPRECATED errores cuando se conecta a una base de datos. En su lugar, utilice las extensiones MySQLi o PDO_MySQL.

+0

se puede hacer ' "SELECT * FROM usuarios WHERE ID IN ($ user_id, $ user_id2)"' y tiene aún más rápido –

+1

Y uno puede hacer una declaración preparada de MySQL también. –

+0

Esto no es correcto si en algún momento SELECCIONA * FROM usuarios DONDE ID = 1 se ejecutó, tiene habilitado el almacenamiento en caché de consultas y esta consulta se almacenó y luego la ejecuta de nuevo obtendrá esto de la memoria caché independientemente de si esta declaración se generó como una consulta directa cadena o una declaración preparada. – Andrew

0
<?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); 
?> 

¿Por qué al utilizar mysqli oop hay un ligero aumento de velocidad al utilizar este script con el estilo de procedimiento mysql o mysqli? Al probar la secuencia de comandos anterior obtengo .0009 segundos de manera consistente más que cuando uso la otra 2. Cuando usé mysql o mysqli procedural, cargué las secuencias de comandos 20x en cada estilo diferente y las dos siempre estuvieron arriba de .001. Cargué la secuencia de comandos anterior 20x y obtengo debajo de .001 5x.

+0

Al realizar pruebas en general, sugeriría usar SQL_NO_CACHE para ayudar a garantizar que las consultas se estén ejecutando. Además, la prueba que tiene no es muy robusta y el rendimiento de acceso RAM/Disco Duro ligeramente aleatorio podría fácilmente sesgar los resultados. De manera realista, se requiere una batería de pruebas bajo las mismas condiciones para estar seguro de que uno u otro tiene una mejora en el rendimiento. – Andrew

Cuestiones relacionadas