Foros del Web » Programando para Internet » PHP »

¿Rendimiento optimo: foreach y dos querys o while con una sola query?

Estas en el tema de ¿Rendimiento optimo: foreach y dos querys o while con una sola query? en el foro de PHP en Foros del Web. Hola, Tengo una duda (que novedad XD ), según phpbench.com foreach es bastante mas rápido que while, pero el tema esta en lo siguiente: - ...
  #1 (permalink)  
Antiguo 26/02/2009, 14:17
 
Fecha de Ingreso: junio-2005
Mensajes: 22
Antigüedad: 15 años
Puntos: 1
¿Rendimiento optimo: foreach y dos querys o while con una sola query?

Hola,

Tengo una duda (que novedad XD ), según phpbench.com foreach es bastante mas rápido que while, pero el tema esta en lo siguiente:

- Usar IN en la consulta y usar while con mysql_fetch_array.

Código PHP:
$array=array('a' => '1''b' => '2');
$p="SELECT * from blah WHERE id IN ( ".$array." )";
    
$foo=mysql_query($p);
    while(
$b=mysql_fetch_array($foo)){
        echo 
"$b[id]";
    } 
- Usar foreach para dentro ejecutar dos querys y usar mysql_fetch_row.

Código PHP:
$array=array('a' => '1''b' => '2');
$kk=explode(",",$array);
    foreach(
$kk as $c){
    
$foo=mysql_query("SELECT * from blah WHERE id=$c");
        
$b=mysql_fetch_row($foo);
        echo 
"$b[1]";
    } 
En principio, al ejecutar dos querys y explode debería ser mas rápido realizar esto con IN, pero foreach es bastante mas rápido que while y al usar IN en la consulta esta se ralentiza mas pero claro de la otra manera son dos querys, ademas le podemos sumar el tema que los puntos para concatenar también ralentizan.

¿Cual es el método mas optimo?

Estoy un poco perdido en este tema.

Gracias.
  #2 (permalink)  
Antiguo 26/02/2009, 14:30
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: ¿Rendimiento optimo: foreach y dos querys o while con una sola query?

Usalo como quieras. Si hablas de uno, o dos, o diez, al final no habrá una diferencia real. Te aseguro que al hablar de más rápido hablan de unos cuantos nanosegundos de diferencia entre uno y otro. Ahora, obviamente el proceso puede resultar MUCHO más lento mientras más consultas a un servidor externo o a MySQL haya (Claro, ya no dependes del estado del servidor PHP exclusivamente). Por lo tanto, me animaría a sugerirte usar una consulta con IN y los posibles ids y el while, como todo mundo hace.

Muchas veces, al querer "optimizar" un código con pequeñeces como esta obtenemos resultados inesperados y muy difíciles de modificar.

  #3 (permalink)  
Antiguo 26/02/2009, 14:36
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 12 años, 1 mes
Puntos: 2534
Respuesta: ¿Rendimiento optimo: foreach y dos querys o while con una sola query?

pues, para empezar ninguno de tus código es correcto...

así que antes de optimizar, ¿¿puedes asegurarte de lo que haces.... ???



PDTA: si entiendo lo que pretendes...

asi que es muy simple, cada consulta de SQL genera una conexión, entonces....

que es mas óptimo ¿un query o varios???

vamos, eso es fácil de resolver....


creo que la respuesta es evidente, y en cuanto a foreach/while

con el while que usas, solo recuperas los datos del puntero... solo has ejecutado una consulta (eso es óptimo, además de obvio)

con el foreach haces una consulta por cada ID ... imagínate 100 conexiones ¿eso es óptimo??

__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #4 (permalink)  
Antiguo 26/02/2009, 15:14
 
Fecha de Ingreso: junio-2005
Mensajes: 22
Antigüedad: 15 años
Puntos: 1
Respuesta: ¿Rendimiento optimo: foreach y dos querys o while con una sola query?

Hola de nuevo y gracias,

No lo he planteado de manera correcta, visto así tenéis mas razón que un santo.


pateketrueke Como decía: "estoy un poco perdido" y tal vez no sepa lo que hago y no entiendo lo que es obvio, es por ello que consulto aquí, de lo contrario no lo haría.

Te agradecería si me puedes ilustrar todo lo que es erróneo, no entendí muy bien esta parte: ¿¿puedes asegurarte de lo que haces.... ??? ¿que es lo que esta mal?.

El planteamiento esta claro que es un planteamiento y nada mas, ni explique condiciones de las tablas si hay joins si usan myisam o innodb si son solo selects, etc, etc... me ha intrigado esa pregunta de asegurarme de lo que hago.


Gracias de nuevo.
  #5 (permalink)  
Antiguo 26/02/2009, 15:23
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 12 años, 1 mes
Puntos: 2534
Respuesta: ¿Rendimiento optimo: foreach y dos querys o while con una sola query?

simple:

Código PHP:
$array=array('a' => '1''b' => '2');

// primero, $array es un array (y aqui, lo usas como string)
// por lo cual el resultado no seria IN( 1,2 ) sino ... IN( Array )
// para "pegar" los valores debes usar join()
// .. si dudas, imprime $p
$p="SELECT * from blah WHERE id IN ( ".$array." )"

// del mismo modo, explode() trabaja con cadenas...
// y tu estas usando un array!!!
// .. esto te daria un error del interprete
$kk=explode(",",$array); 
despues de esto, todo esta bien... tu planteamiento es correcto!!

la optimización es evidente:

- una consulta que arroja N resultados
VS
- N consultas que arrojen un resultado


¿te parece??
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #6 (permalink)  
Antiguo 26/02/2009, 16:12
 
Fecha de Ingreso: junio-2005
Mensajes: 22
Antigüedad: 15 años
Puntos: 1
Respuesta: ¿Rendimiento optimo: foreach y dos querys o while con una sola query?

Entendido perfectamente,

Tenia varias cosas en la cabeza y me equivoque, ni lo mire, el tema muy básicamente surge de aquí:

Código PHP:
$cadena="1,2,3";
$k=explode(",",$cadena);
    foreach(
$k as $c){ ........ 
De hecho las pruebas originales parten de una cadena que se obtiene de un array y que tiene que volver a ser un array o cadena dependiendo de las condiciones de la consulta, variables, condiciones y demás, lo escribí y ni me pare a mirarlo, tienes razón me equivoque.


Sobre las consultas y los resultados lógicamente también te doy la razón.

Siempre y cuando tengamos en cuenta que el resultado sea el mismo (que si, es cierto y te doy la razón de nuevo, lo plantee de esa manera) si no la cosa puede cambiar bastante Pejm:

Usar una sola consulta seleccionando todo lo que tienen las tablas (select *) usando like para recorrer varias tablas (con sus joins correspondientes) donde hay cientos de campos (que ademas están al final de la tabla y son campos de texto) y cientos de miles de registros con muchísimas peticiones al mismo tiempo en un servidor remoto con mas bases de datos o hacerlo usando varias consultas optimizadas.

Es como innodb y myisam pues depende de como y para que te resultara de una manera o de otra.

Pero evidentemente en lo que escribí inicialmente no aparece nada de esto así que tienes toda la razón en todo lo que comentas.



Gracias y disculpa la molestias.
  #7 (permalink)  
Antiguo 26/02/2009, 16:30
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 12 años, 1 mes
Puntos: 2534
Respuesta: ¿Rendimiento optimo: foreach y dos querys o while con una sola query?

yo si soy una molestia, de verdad!


efectivamente se pueden resolver muchos problemas usando tan solo sintaxis SQL

muchas veces es mas "sencillo" para nosotros hacer ciclos, y ciclos, y ciclos... para relacionar nuestros datos en las tablas, o bien, cualquier acción CRUD y todo, usando PHP ...

cuando un gran porcentaje de esto se logra con un buen diseño de la base de datos

y claro, usando al máximo el motor de SQL (ojo, me refiero al SQL en si ... NO a hacer muchas consultas de SQL desde PHP)


sin mas, suerte!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #8 (permalink)  
Antiguo 26/02/2009, 17:01
 
Fecha de Ingreso: junio-2005
Mensajes: 22
Antigüedad: 15 años
Puntos: 1
Respuesta: ¿Rendimiento optimo: foreach y dos querys o while con una sola query?

En absoluto eres molestia, todo lo contrario ;)

El problema viene donde todos los tenemos, en que las aplicaciones siempre se hacen rápido sin seguir nada parecido a un patrón de diseño y ni hablar de CMMI o demás, eso de las buenas practicas para los que vengan detrás, ¡¡ y que aprieten !!

Con lo que tocas un código (o como se dice en España: marrón) y te encuentras con comentarios en ruso o mas de 700 funciones sin comentar ni una sola (verídico) con aplicaciones que no escalan nada de nada, son monstruos tocados por 15 o 20 equipos (o empresas) distintos y que encima tienes que solucionar tu y tu gente, así que como para ponerte a tocar el diseño de la base de datos (que en muchos casos tiene código de la aplicación dentro y por supuesto integridad ninguna, búscate la vida y vuélvete loco para crear algo coherente si buscas documentar sobre diagramas de ER, esquemas de funcionamiento, etc...).


Efectivamente con un correcto uso de SQL solucionaríamos muchos problemas y no haciendo consultas y mas consultas, reconozco que muchas veces al ver querys enormes con tanto "tabla.campo" en un código que no es tuyo, sin tiempo para mirarlo, que tiene que estar para ayer por la mañana, hacemos (hago) guarradas varias, en este caso era buscar un poco de agilidad muy concreta sobre un "desmierde" impresionante sobre php, lenguaje interpretado que hacia años que no tocaba y en el cual voy bastante perdido en el tema de rendimientos.


Saludos cordiales.
  #9 (permalink)  
Antiguo 26/02/2009, 20:13
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 15 años
Puntos: 32
Respuesta: ¿Rendimiento optimo: foreach y dos querys o while con una sola query?

Acompaño la respuesta y recalco "la optimización temprana es uno de los grandes males de la Ingeniería"

Ponerse a discutir qué es más rápido, si un while o un foreach, más en el entorno PHP, es no tener los conceptos claros.

Primero, cumplir la funcionalidad (que tampoco significa hacer cualquier chanchada rápida y luego lo arreglamos) y luego ver si justifica, un estudio de rendimiento y posterior optimización (si el estudio anterior demostró fehacientemente que se justificaba).
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #10 (permalink)  
Antiguo 27/02/2009, 12:17
 
Fecha de Ingreso: junio-2005
Mensajes: 22
Antigüedad: 15 años
Puntos: 1
Respuesta: ¿Rendimiento optimo: foreach y dos querys o while con una sola query?

Desde luego como sois.

Esa frase "la optimización temprana es uno de los grandes males de la Ingeniería" esta muy bien si haces un proyecto en ciertas condiciones (desde cero y condiciones muy concretas que en casi ningun caso van ligadas a la realidad laboral de mi pais= España) si lees mas arriba (solo un post antes que el tuyo) veras que el asunto no estaba enfocado a eso y ya ha sido debatido en anteriores posts.

Por otro lado si crees que discutir sobre while o foreach es no tener conceptos claros, no se cuantos bucles tiene una aplicación con la que trabajes habitualmente pero supongo que bastantes. Cuando tienes miles ligados a cientos de consultas y tienes acotada la parte de la aplicación donde tienes problemas de rendimiento esos tiempos en recorrerlos son determinantes como explico mas arriba ¿no crees?

Y por ultimo para un CISA o CISM (no lo se exactamente pero siendo consultor en IT....) que declara este orden en el desarrollo de un proyecto:

1- Cumplir funcionalidad
2- Justificar la funcionalidad
3- Benchmark de rendimiento
4- Optimizar

¿Que es una nueva metodología? sinceramente desconozco esa manera de trabajar.

Tampoco entiendo usar Word como formato estandart y defender el software libre, en fin que de php ya he visto que te han hecho "miembro colaborador" y das clases (por cierto en España la ingeniería del software es solo opción de master y actualmente adaptandose a bolonia, y no, no es exclusiva de ingenieros informáticos).

Evidentemente como ya dije antes; hace años que no toco php y cosas así (interpretados y scripts) voy perdido en este lenguaje por la misma razón: son scripts sobre un interprete.

Tan solo era curiosidad y una sencilla pregunta, a cambio me intentáis dar lecciones en el gobierno de IT, ingeniería del software, diseño de aplicaciones y un largo etc, y ese es el problema que os metéis en otros conceptos que si, tal vez pueden venir al caso y por ello ya he dado la explicación en las respuestas anteriores, pero no me deis lecciones de ingeniera del software por favor que no las he pedido.


Saludos.
  #11 (permalink)  
Antiguo 27/02/2009, 12:40
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 15 años
Puntos: 32
Respuesta: ¿Rendimiento optimo: foreach y dos querys o while con una sola query?

No sé que pasa con los profesionales que no soportan un comentario distinto a lo que esperan que tienen que descalificar y desacreditar a su contraparte, solo porque su orgullo es más grande que sus conocimientos.

La verdad que no entiendo qué tiene que ver sobre word, software libre, mis cursos, si estoy en Latinoamérica o en España, etc, con la respuesta que te doy.

Si no toleras una discrepancia, no preguntes o no respondas.

Se justifica, si tienes un sistema que hace cientos de loops y los tienes que optimizar, muy probablemente te equivocaste de lenguaje o de programación.

Para el uso que se le da a PHP en el entorno adecuado (web) tener que optimizar for's / while's significa que muy probablemente algo está mal hecho.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:39.