Foros del Web » Programando para Internet » PHP »

Ahorrar recursos con mysql

Estas en el tema de Ahorrar recursos con mysql en el foro de PHP en Foros del Web. Hola a la muchachada! Espero que todo sigue bien. Chicos, una duda me aqueja: Qué es más "económico" en lo que a recursos se refiere ...
  #1 (permalink)  
Antiguo 01/06/2005, 09:13
Avatar de nachopro  
Fecha de Ingreso: noviembre-2003
Ubicación: Haedo, Bs. As.
Mensajes: 290
Antigüedad: 14 años
Puntos: 2
Pregunta Ahorrar recursos con mysql

Hola a la muchachada!
Espero que todo sigue bien.

Chicos, una duda me aqueja:
Qué es más "económico" en lo que a recursos se refiere si necesitamos mostrar un campo en reiteradas oportunidades??
Llamar cada vez un echo $row_men['id_sec'], o bien declarar una variable nueva sin hacer llamadas a la matriz como aquí:

Código PHP:
      <? $sql_sec "select id_sec, sec_baj from secciones order by sec_pos";
    
$sec_result mysql_query($sql_sec) or die("Error: <b>$sql_sec</b>"mysql_error());
    if (
mysql_num_rows($sec_result)) {
    while(
$row_men mysql_fetch_assoc($sec_result)) {
        
$sec_id $row_men['id_sec']; ?>
      <a href="?sec=<? echo $sec_id?>"
        onMouseOver="move_in('men.<? echo $sec_id?>','rec.img/men.<? echo $sec_id?>.b.gif');"
        onMouseOut="move_out('men.<? echo $sec_id?>','rec.img/men.<? echo $sec_id?>.a.gif');"> 
      <img name="men.<? echo $sec_id?>" border=0 src="rec.img/men.<? echo $sec_id?>.a.gif" title="<? echo stripslashes($row_men['sec_baj']); ?>..."></a> 
      <? }
muchas gracias!
  #2 (permalink)  
Antiguo 01/06/2005, 09:19
 
Fecha de Ingreso: diciembre-2003
Mensajes: 213
Antigüedad: 14 años
Puntos: 0
pues en mi ulmide opinion creo que los recursos que te vas a ahorrar haciebdo eso no son significativos.

Si yo decidiera entre uno y otro..... me daria exactamente igual.
Total, por una variable mas o menos. Pero esta es solo mi opinion, a ver que dicen los demas.
  #3 (permalink)  
Antiguo 01/06/2005, 10:29
Avatar de nachopro  
Fecha de Ingreso: noviembre-2003
Ubicación: Haedo, Bs. As.
Mensajes: 290
Antigüedad: 14 años
Puntos: 2
Llegué a una conclusión, pero para otro caso.
Supónganse que deben listar los campos de un único registro:
Sí debemos mostrarlos muchas veces y aplicarle funciones, como stripslashes();, combiene hacer esto:
Ejemplo del script de mi sitio (el cual selecciona el contenido desde MySQL para generar cada sección:
Código PHP:
<? if (!isset($_GET['sec']) || !is_numeric($_GET['sec'])) {
    
$sec_id "1";
}
else {
    
$sec_id $_GET['sec'];
}
$sql_sec "select id_sec, sec_tit, sec_te1, sec_te2 from secciones where id_sec = '$sec_id'";
$sec_result mysql_query($sql_sec) or die("Error: <b>$sql_sec</b><br>"mysql_error());
if (
$row mysql_fetch_assoc($sec_result)) {
    
$id_sec $row['id_sec'];
    
$sec_tit stripslashes($row['sec_tit']);
    
$sec_te1 stripslashes($row['sec_te1']);
    
$sec_te2 stripslashes($row['sec_te2']);
}
else {
    
$id_sec "0";
    
$sec_tit "Error: No existe contenido para la secci&oacute;n ".$sec_id.".";
    
$sec_te1 "Error: No existe contenido para la secci&oacute;n ".$sec_id.".";
    
$sec_te2 "Error: No existe contenido para la secci&oacute;n ".$sec_id.".";
}
?>
espero que a los novatos les sirva para optimizar sus códigos

igual sigo esperando respuesta a mi primer pregunta
  #4 (permalink)  
Antiguo 01/06/2005, 12:32
Avatar de magoote  
Fecha de Ingreso: agosto-2004
Ubicación: Patagonia - Argentina
Mensajes: 187
Antigüedad: 13 años, 4 meses
Puntos: 0
Me parece que basicamente es lo mismo ya que el PHP cuando trabajas con un $row_men['id_sec']; en definitiva es una variable de tipo array, con lo cual, el recurso de MySQL ya se realizo una unica vez, despues de hacer el SELECT la consulta te pasa el resultado a una variable, en definitiva solo te podes ahorrar un poco de codigo y nada mas.
Saludos.
__________________
Desarrollo sitios web portales hosting Neuquen Argentina
• La imaginación es más importante que el conocimiento Albert Einstein (1879-1955)
  #5 (permalink)  
Antiguo 02/06/2005, 08:25
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Lo que corresponde a PHP y funciones Mysql ... usar: mysql_fetch_assoc($sec_result)) vs por ejemplo mysql_fetch_Array() ya es algo más ótpimo .. (por el tipo de array que genera)

Pero, .. hay muchas otras cosas que deberías evaluar la forma de resolverlo con SQL .. y darle el trabajo entero de ese tipo de cosas al SQL.

Me refiero (aunque no estemos acostumbrados) .. a usar las funciones nativas del SQL de la BD .. .por ejemplo y andamos buscando obtener un "existe o no" tal registro bajo tal condición (y sólo eso) .. no usar myslq_num_rows() sino COUNT() .. mucho más óptimo pues sólo se genera un único resultado con el total de registros encontrados bajo esas condiciones (WHERE ...) pero no "todos" los resultados para luego darle el trabajo a PHP para que los cuente (con mysql_num_rows()) .. En otras ocasiones .. si "prevees" que el porcentaje de veces que no se encuentre el dato es mayor que los que si se encuentra .. tal vez venga mejor usar COUNT() siempre y si existe .. ahí continuar con los mysql_fetch_xxx() para obtener dichos resultados.

En otros casos .. darse "vuelta" con datos tipo fecha en campos "VARCHAR" por ejemplo no es lo ideal. Hay que usar campos de tipo fecha y sus funciones SQL de tratamiento de fechas a ser posible.

Un saludo,
  #6 (permalink)  
Antiguo 02/06/2005, 09:19
Avatar de nachopro  
Fecha de Ingreso: noviembre-2003
Ubicación: Haedo, Bs. As.
Mensajes: 290
Antigüedad: 14 años
Puntos: 2
Gracias por contestar =)

Cluster, gracias por incitarme a buscar la función más eficaz en todos tus aportes (que ya datan de años)

Ahora me surje una duda con lo del "si existe o no".
Esa es la estructura que vengo utilizando en mi scripts.
a lo que voy, intentas decir que si agrego en REF#1 una consulta con count() y la evalúo para ver si existe contenido o o y elimino la REF#2 (con los elses y cosas que implico) aumento su eficacia, no??

claro.. resulta obvio que si "no hay contenido" se ahorra una consulta más pesada..
pero en el caso general de que casi siempre haya contenido, resultaría más cargoso que mi actual scrip??

Código PHP:
<?
REF
#1
$sql_sec "select id_sec, sec_baj from secciones order by sec_pos";
$sec_result mysql_query($sql_sec) or die("Error: <b>$sql_sec</b><br>"mysql_error());
if (
mysql_num_rows($sec_result)) { // REF#2
  
while($row_men mysql_fetch_assoc($sec_result)) {
  
//mostrar resultados
  
}
}
else {
  
//no hay resultados
}
?>
muchas gracias =)
  #7 (permalink)  
Antiguo 02/06/2005, 11:41
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Si tu ya has podido comprobar y analizar ese detalle y sabes que el porcentaje de veces que tu dato no se encuentre es mucho menor al que se encuentra .. en tu caso sigue como lo haces actualmente.

mm Pero habría que probarlo .. me parece que una sentencia tipo:
SELECT COUNT(*) FROM tabla
Es más rápido para determinar si hay o no resultados .. para a continuación seguir con el:
SELECT * FROM tabla WHERE alguncampo=$variable

Es decir .. si no vas a presentar todos los resultados de esa tabla(s) implicada(s) .. puede ser algo más óptimo (sobre todo ya no en "proceso" sino en recursos de memoria que va a ocupar temporalmente para su proceso de mysql_num_rows() en contar en "memoria" esos registros).

Tal vez para otras secciones de tu aplicación te venga mejor probar lo que te propongo.

Un saludo,
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 07:48.