2012-03-19 7 views
12

He leído varias preguntas al respecto, pero me temo que pueden estar desactualizadas ya que se han lanzado versiones más nuevas de las bibliotecas PDO desde que se respondieron estas preguntas.¿La biblioteca PDO es más rápida que las funciones nativas de MySQL?

He escrito una clase de MySQL que crea parámetros de consultas y escapes, y luego devuelve resultados basados ​​en la consulta. Actualmente esta clase está utilizando las funciones integradas de mysql.

Soy muy consciente de las ventajas de usar la Biblioteca PDO, p. es compatible con otras bases de datos, los procedimientos almacenados son más fáciles de ejecutar, etc. ... Sin embargo, lo que me gustaría saber es simplemente; está usando la Biblioteca PDO más rápido que usando las funciones incorporadas de mysql?

Acabo de escribir la clase equivalente para MsSQL, por lo que volver a escribir para trabajar con todas las bases de datos no me tomaría mucho tiempo. ¿Vale la pena o la biblioteca PDO es más lenta?

+1

Esa es una pregunta interesante ... Siempre estaba usando PDO solo por una cosa ... procedimientos almacenados ... No he comprobado la velocidad ... pero los procedimientos almacenados son suficientes para mí: P. Los procedimientos almacenados siempre aumentan la seguridad de las aplicaciones web, porque si las usa, no hay lugar para "Olvidé' mysql_real_escape_string() 'call" :). – xfix

+2

Si conoce las _muchas_ otras ventajas de PDO, pero solo le preocupa la velocidad, ¿por qué no simplemente compararla y averiguar si satisface sus necesidades? PDO es superior en muchos sentidos, incluso si fue un poco más lento, todavía tiene la ventaja. –

+4

PDO es marginalmente más lento que las funciones 'mysql'. Sin embargo, lo que la extensión 'mysql' no tiene son declaraciones preparadas. Por lo tanto, si tiene una inserción larga, usar PDO será mucho más rápido a través de las declaraciones preparadas porque simplemente enviará los parámetros a la consulta ya analizada. Sin embargo, la velocidad ** no debe ser ** el factor decisivo aquí. Debería usar PDO en lugar de funciones 'mysql'. Además, es mucho más fácil codificar con PDO además es genial hacer cosas en 1 línea que harías en 5 - 10 líneas con 'mysql'. –

Respuesta

11

Encontré PDO en muchas situaciones/proyectos para ser incluso más rápido que los módulos más nativos.
Principalmente porque muchos patrones/bloques de construcción en una "aplicación PDO" requieren menos código dirigido por script php y se ejecuta más código en la extensión compilada y es una penalización de velocidad cuando se hacen cosas en el script. Pruebas simples y sintéticas sin datos y manejo de errores a menudo no cubren esta parte, y por eso (entre otros problemas, como por ejemplo, la medición de imprecisiones) creo que "10000x SELECT x FROM foo tomó 10ms más". Las conclusiones a menudo fallan.
No puedo proporcionarle puntos de referencia sólidos y el resultado depende de cómo la aplicación circundante maneje los datos, pero incluso las pruebas sintéticas generalmente solo muestran diferencias tan insignificantes que es mejor dedicar su tiempo a optimizar sus consultas, el servidor MySQL, la red , ... en lugar de preocuparse por el rendimiento bruto de PDO. Dejemos que solo la seguridad y el manejo de errores ...

+0

Gracias por su respuesta, eso parece ser exactamente lo que estoy buscando. No me molesta realmente una diferencia de 10 ms, ningún ser humano lo notará, siempre y cuando no sea sustancialmente más lento, lo que parece no serlo. –

+2

incluso si las funciones PDO contra 'mysql_xxxx' se igualan o son ligeramente más lentas, el beneficio de usar PDO es mayor que la alternativa" heredada ", IMO –

+1

@BenCarey, si desea comparar PDO, debe recordar que al usar declaraciones preparadas, en realidad no solo llaman a la consulta sino que también impiden las inyecciones. –

1

Mi observación es que PDO parece ser menos tolerante de muchas conexiones consecutivas, es decir, las conexiones que se crean en un bucle. Sé que esta es una mala práctica, es el primer lugar. Cuando estaba usando mysql_ *, mis consultas en bucle parecían ser bastante rápidas. Sin embargo, cuando cambié a PDO noté tiempos de respuesta mucho más largos para este tipo de consultas.

TL; DR; - Si cambia a PDO y llama consultas en un bucle de PHP, puede necesitar volver a escribir la aplicación para llamar a una única consulta en lugar de a muchas consultas consecutivas.

Cuestiones relacionadas