Ver Mensaje Individual
  #7 (permalink)  
Antiguo 28/04/2011, 16:53
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Buscador web, ¿mejor implementación?

Disculpa que meta la cuchara, pero usando tu mismo lenguaje, el ejemplo de esa web es una burrada absoluta. Ese código no está midiendo en realidad el tiempo de ejecución de una consulta, está comparando consultas incompatibles desde el punto de vista de uso de recursos.

La primera consulta, pide a MySQL que cuente la cantidad de registros totales de una tabla, lo que es relativamente rápido, pero por sobre todo la transferencia de datos en la red es extremadamente pequeña, ya que a duras penas requiere un datagrama en TCP. O sea, a nivel de red, es menos que un suspiro.

La segunda consulta pide que MySQL devuelva la totalidad de registros de la tabla, lo que puede implicar un enorme uso de memoria (dependiendo de la tabla), y grandes cantidades de datagramas para ser transferido. Eso puede significar tanto 100 Kb o 100 Mb de datos.
De hecho, es muy posible que el 99,99% del tiempo de esos 59.36 segundos sean en realidad tiempo de red, es decir, transferencia de datos, y no ocnsulta. No te olvides que un paquete transferido por internet o red ethernet no tiene más de 1500 bytes, por lo que mientras mayor sea el volcado de la tabla, mayor será cantidad de paquetes (y tiempo) se necesitarán para la transferencia.

Puedo decirte más, mientras que la segunda consulta lee forzosamente toda la tabla, la primera puede que ni siquiera esté accediendo a la suya, ya que para obtener esa infomación no se necesita eso, porque no es una lectura condicionada. En esos casos MySQL no lee la tabla. Lee la información de information_schema.tables.

A esto tienes que sumarle otra cosa: La primera consulta se ejecuta en MySQL y devuelve un sólo valor. La segunda se ejecuta en MySQL, pero el valor buscado lo devuelve PHP, no MySQL exactamente.

¿Se entienden las diferencias?

Por otro lado, el planteo de "mejor implementación" está incompleto, porque no estás considerando indices tipo IDEX, FULTEXT, ni su uso, así como tampoco estás planteando qué diseño tiene tu estructura de datos (lo que aportas es pobre), ni tampoco la selectividad que estás planteando para tus "palabras clave".
Falta demasiado para guiarte de forma efectiva.

Intenta de nuevo, si es posible con mejores términos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 28/04/2011 a las 17:22