PHP y MySql una estrecha relación

Por el 27 de diciembre de 2006

en: Programacion

La estrecha relación entre PHP y MySql es algo que conocemos hace años.

Ultimamente se esuchan muchas opiniones acerca de los nuevos objetos mejorados de MySql hablamos de (mysqli) y (PDO):

¿Que es mysqli?

La extensión mysqli permite acceder a la funcionalidad proveida por MySQL 4.1 y superior. Más información acerca del servidor de base de datos MySQL puede ser encontrada en http://www.mysql.com/

Más información

No se exactamente cuáles son las caracteristicas nuevas que nos ofrecen pero echando un vistazo al manual las más relevantes que aprecio son , codificación, transacciones y declaraciones elaboradas.

(Aquí os dejo un enlace a Zend.com, un articulo que discute las supuestas mejoras de mysqli)

¿Que es PDO?

La extension para PHP (PDO) define un ligero interfaz, para el acceso a bases de datos.

Más información

Como mysqli, también ayuda con declaraciones elaboradas.
Sin embargo, para MySQL, no hace todo lo que hace mysqli. Lo más detacable es charset y funcionalidad de codificación. Pero, para los nuevos usuarios (especialmente ésos que son de Perl, ASP, etc.) es probablemente un buen punto de partida.

Declaraciones elaboradas

“El protocolo cliente/servidor de MySQL prevee el uso de declaraciones elaboradas. Esta capacidad utiliza la estructura de datos de la declaración MYSQL_STMT devuelta por la función mysql_stmt_init ().
La ejecución preparada es una manera eficiente de ejecutar una declaración más de una vez. La declaración primero se analiza para prepararla para la ejecución. Entonces se ejecuta una o más veces a la vez, usando el conjunto de declaraciones devueltas por la función de la inicialización.”

Una de las mayores ventajas que se han escuchado sobre las declaraciones elaboradas es que reduce el tiempo de ejecución de las sentencias MySql, aquí hay algunas pruebas de selects con PDO y mysqli con declaraciones elaboradas, recogidas en esta pagina dealnews.

Las pruebas

Hay dos tipos de pruebas. En todos los casos, pruebas han sido realizadas varias veces. La mejor marca para cada prueba fue registrada.

Select

Un consulta select de 100 filas en una tabla que contiene información de un foro.

select
phorum_messages.author, phorum_messages.datestamp, phorum_messages.email,
phorum_messages.message_id, phorum_messages.meta, phorum_messages.moderator_post,
phorum_messages.modifystamp, phorum_messages.parent_id, phorum_messages.sort,
phorum_messages.status, phorum_messages.subject, phorum_messages.thread,
phorum_messages.thread_count, phorum_messages.user_id, phorum_messages.viewcount,
phorum_messages.closed
from
phorum_messages use index (list_page_float)
where
modifystamp > 0 and forum_id = 12 and status = 2 and parent_id = 0 and sort > 1
order by
modifystamp desc
limit 0, 100

Medir el tiempo de una sola consulta no daría datos demasiado útiles por eso se realizan algunas pruebas más que dan como resultado lo siguiente, se muestran el número máximo de repeticiones de la consulta dada en un segundo:

tipo req/s
————————
mysqli…………..164
mysql……………162
PDO………………88
mysqli (elaboradas)..86
PDO (elaboradas)…..81

Como puedes ver decepciona la velocidad de PDO.Sin embargo nos puede alegrar ver que mysqli ofrece el mismo rendimiento que mysql. Tambien queda claro que utilizar las declaraciones elaboradas no es nada rápido.

Insert

La prueba siguiente es insertar 10.000 filas en una tabla. Cada consulta una cantidad al azar de datos en el campo texto. Aqui os dejo la prueba:

CREATE TABLE `testing_mysql` (
`id` int(10) unsigned NOT NULL auto_increment,
`char_field` varchar(255) NOT NULL default ”,
`text_field` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM

MySQL soporta lo que llama insert extendidos. Básicamente, puedes enviar una consulta con multiples valores, utilizando –opt con el mysqldump, se crean dumps usando este formato.
En la siguiente prueba se utilizan estos métodos y los utilizados en la prueba anterior con las declaraciones elaboradas.

extension time
————————–
pdo (extendido)….18.17s
mysqli (extendido).18.40s
mysql (extendido)..18.46s
pdo (preparadas)…25.04s
mysqli(preparadas).36.93s
mysqli………….50.43s
mysql…………..53.09s
pdo…………….59.96s

Los resultados no son los esperados. Usar los inserts extendidos optimiza la velocidad del servidor.

Conclusión

Rendimiento

Para el mejor rendimiento deberías escoger entre mysql y mysqli siendo las dos muy parecidas en cuanto a resultados. Aunque la mas recomendable debe ser mysqli puesto que nos ofrece mejores opciones para optimizar la velocidad.
PDO no es el formato que ofrece mayor rendimiento por lo tanto su uso no es demasiado recomendado.

Características

Por características el mejor es mysqli con la posibilidad de fijar las preferencias de la conexión y otras muchas opciones que sin duda alguna superan las de mysql.

Facilidad de uso

La extensión mysql esta ya totalmente probada y es utilizada pos millones de usuarios, hay numerosa documentación sobre como usarla, para muchos usuarios a simple vista es mucho más atractiva por otro lado mysqli parece ofrecer mejor rendimiento y la migracion de una extension a otra es sencilla solo habrá que cambiar unos cuantos parametros.
PDO es sin embargo unicamente recomendable para desarrolladores que vengan de otros lenguajes como ASP o Perl por su facilidad de uso.Sin embargo no lo recomendariamos para los usuarios PHP que buscan un alto rendimiento.

Y el ganador es…

Mysqli que es sin duda un mysql – mejorado. Ofrece más características y un gran rendimiento.

Fuente del artículo

Dejar un comentario