Foros del Web » Programando para Internet » PHP »

Mejorar rapidez de carga de varias consultas en un formulario

Estas en el tema de Mejorar rapidez de carga de varias consultas en un formulario en el foro de PHP en Foros del Web. Hola, tengo la siguiente consulta. Código PHP: $id_maquina = $_GET [ "id_maquina" ]; $str_edit  =  "SELECT * FROM maquines WHERE id_maquina = $id_maquina" ; $q_edit  =  mysql_query ( $str_edit ); $rc_edit  =  ...
  #1 (permalink)  
Antiguo 20/03/2006, 11:36
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 12 años, 10 meses
Puntos: 10
Pregunta Mejorar rapidez de carga de varias consultas en un formulario

Hola,
tengo la siguiente consulta.
Código PHP:
$id_maquina=$_GET["id_maquina"];
$str_edit "SELECT * FROM maquines WHERE id_maquina = $id_maquina";
$q_edit mysql_query($str_edit);
$rc_edit mysql_num_rows($q_edit);
$row_edit mysql_fetch_array($q_edit); 
Con el resultado de esa consulta relleno este formulario q es para editar el registro seleccionado.
Código HTML:
<html>
<head>
<link rel="stylesheet" type="text/css" href="../style/style.css">
<title>Editar Maquina</title>
<script language="JavaScript">
function envia(){
	if (document.formalta.num_maq.value == '') {
		alert ("El nombre de la Maquina és obligatorio.");
	}else{
		document.formalta.submit();
	}
}
function comprovar(camp) {
	if (isNaN(camp.value) && camp.value != "") {
		alert("Tienes que introducir un valor numerico. La coma es el punto.");
		camp.focus();
		camp.value = "";
		}
}
</script>
<script language="Javascript" src="../js/formatdata.js"></script>
</head>
<body class="fons">
<div align="center" class="text">Editar Maquina</div>
<form name="formalta" action="index.php?fuseaction=update" method="POST">
<table width="100%" align="center" cellpadding="0" cellspacing="0" class="cuadre">
<tr>
<td width="50%" valign="top">
<table width="100%" align="center" cellspacing="2" cellpadding="0" border="0" >
<tr>      	
	<td colspan="2">&nbsp;</td>
</tr>
<tr>
	<td>&nbsp;<strong>Num. Maquina</strong></td>
	<td align="left"><input align="left" size="20"type="text"name="num_maq" value="<? echo $row_edit[num_maq]?>"></td>
</tr>
<tr>		
	<td>&nbsp;<strong>Tipos de Maquina</strong></td>
	<td align="left">
		<select name="id_maquina" class="combo">
		<?PHP
		//consulta de dades per crear el COMBOBOX
		$result = mysql_query("SELECT id_tipus_maquina,tipus_maquina FROM tipus_maquina 
							   ORDER BY tipus_maquina");
		//mostrem els resultats
		while ($row=mysql_fetch_array($result))
		{
			if ($row_edit[tipus_maq]==$row[id_tipus_maquina]){
			echo ("<OPTION VALUE=".$row[id_tipus_maquina]." SELECTED>".$row[tipus_maquina]."\n");
			}else{
			
			echo ("<OPTION VALUE=".$row[id_tipus_maquina].">".$row[tipus_maquina]."\n");
				
			}
		}	
		mysql_free_result();				
		?>	
		</select>
	</td>
</tr>
<tr>		
	<td>&nbsp;<strong>Seccion</strong></td>
	<td align="left">
		<select name="id_seccio" class="combo">
		<?PHP
		//consulta de dades per crear el COMBOBOX
		$result = mysql_query("SELECT id_seccio,seccio FROM seccio ORDER BY seccio");
		//mostrem els resultats
		while ($row=mysql_fetch_array($result))
		{
			if ($row_edit[id_seccio]==$row[id_seccio]){
			echo ("<OPTION VALUE=".$row[id_seccio]." SELECTED>".$row[seccio]."\n");
			}else{
			
			echo ("<OPTION VALUE=".$row[id_seccio].">".$row[seccio]."\n");
				
			}
		}	
		mysql_free_result();				
		?>	
		</select>
	</td>					
</tr>
<tr>		
	<td>&nbsp;<strong>Fabricante</strong></td>
	<td align="left">
		<select name="id_fabricant" class="combo">
		<?PHP
		//consulta de dades per crear el COMBOBOX
		$result = mysql_query("SELECT id_fabricant,fabricant FROM fabricants ORDER BY fabricant");
		//mostrem els resultats
		while ($row=mysql_fetch_array($result))
		{
			if ($row_edit[id_fabricant]==$row[id_fabricant]){
			echo ("<OPTION VALUE=".$row[id_fabricant]." SELECTED>".$row[fabricant]."\n");
			}else{
			
			echo ("<OPTION VALUE=".$row[id_fabricant].">".$row[fabricant]."\n");
				
			}
		}
		mysql_free_result();					
		?>	
		</select>
	</td>					
</tr>
<tr>		
	<td>&nbsp;<strong>Modelo</strong></td>
	<td align="left">
		<select name="id_model" class="combo">
		<?PHP
		//consulta de dades per crear el COMBOBOX
		$result = mysql_query("SELECT id_model,model FROM models ORDER BY model");
		//mostrem els resultats
		while ($row=mysql_fetch_array($result))
		{
			if ($row_edit[id_model]==$row[id_model]){
			echo ("<OPTION VALUE=".$row[id_model]." SELECTED>".$row[model]."\n");
			}else{			
			echo ("<OPTION VALUE=".$row[id_model].">".$row[model]."\n");
				
			}
		}	
		mysql_free_result();				
		?>	
		</select>
	</td>					
</tr>
<tr>		
	<td>&nbsp;<strong>Marca</strong></td>
	<td align="left">
		<select name="id_model" class="combo">
		<?PHP
		//consulta de dades per crear el COMBOBOX
		$result = mysql_query("SELECT id_marca,marca FROM marques ORDER BY marca");
		//mostrem els resultats
		while ($row=mysql_fetch_array($result))
		{
			if ($row_edit[id_marca]==$row[id_marca]){
			echo ("<OPTION VALUE=".$row[id_marca]." SELECTED>".$row[marca]."\n");
			}else{			
			echo ("<OPTION VALUE=".$row[id_marca].">".$row[marca]."\n");
				
			}
		}	
		mysql_free_result();				
		?>	
		</select>
	</td>					
</tr>
<tr>		
	<td>&nbsp;<strong>Numero de Serie</strong></td>
	<td align="left"><input align="left" size="20" type="text" name="nserie" value="<? echo $row_edit[nserie]?>"></td>					
</tr>
<tr>		
	<td>&nbsp;<strong>Fecha Compra</strong></td>
	<? 
		$data_compra=$row_edit[data_compra];
		$data_compra=giragiradata($data_compra);
	?>
	<td align="left"><input align="left" size="20" type="text" name="data_compra" value="<? echo $data_compra?>" onKeyUp="this.value=formateafecha(this.value);"></td>					
</tr>
<tr>		
	<td>&nbsp;<strong>Precio</strong></td>
	<td align="left"><input align="left" size="20" type="text" name="preu" value="<? echo $row_edit[preu]?>"></td>					
</tr>
<tr>		
	<td>&nbsp;<strong>Garantia</strong></td>
	<? 
		$garantia=$row_edit[data_garantia];
		$garantia=giragiradata($data_garantia);
	?>
	<td align="left"><input align="left" size="20" type="text" name="data_garantia" value="<? echo $garantia?>" onKeyUp="this.value=formateafecha(this.value);"></td>					
</tr>
<tr>		
	<td>&nbsp;<strong>Año Fabricación</strong></td>
	<td align="left"><input align="left" size="20" maxlength="4" type="text" name="anyfabricacio" value="<? echo $row_edit[anyfabricacio]?>"></td>					
</tr>
<tr>		
	<td>&nbsp;<strong>Potencia (KW) </strong></td>
	<td align="left"><input align="left" size="20" type="text" name="potencia" value="<? echo $row_edit[potencia]?>"onBlur="comprovar(this)"></td>					
</tr>
<tr>		
	<td>&nbsp;<strong>Voltaje/Fase/Intensidad</strong></td>
	<td align="left"><input align="left" size="20" type="text" name="voltatje_fase_int" value="<? echo $row_edit[voltatje_fase_int]?>"></td>					
</tr>
<tr>		
	<td>&nbsp;<strong>Proveedor</strong></td>
	<td align="left">
		<select name="id_proveidor" class="combo">
		<?PHP
		//consulta de dades per crear el COMBOBOX
		$result = mysql_query("SELECT id_empresa,empresa FROM empreses 
							   WHERE proveidor=1
							   ORDER BY empresa");
		//mostrem els resultats
		while ($row=mysql_fetch_array($result))
		{
			if ($row_edit[id_empresa]==$row[id_empresa]){
			echo ("<OPTION VALUE=".$row[id_empresa]." SELECTED>".$row[empresa]."\n");
			}else{			
			echo ("<OPTION VALUE=".$row[id_empresa].">".$row[empresa]."\n");
				
			}
		}	
		mysql_free_result();				
		?>	
		</select>
	</td>					
</tr>
<tr>		
	<td>&nbsp;<strong>Empresa Manteniment</strong></td>
	<td align="left">
		<select name="id_empresa" class="combo">
		<?PHP
		//consulta de dades per crear el COMBOBOX
		$result = mysql_query("SELECT id_empresa,empresa FROM empreses ORDER BY empresa");
		//mostrem els resultats
		while ($row=mysql_fetch_array($result))
		{
			if ($row_edit[id_empresa]==$row[id_empresa]){
			echo ("<OPTION VALUE=".$row[id_empresa]." SELECTED>".$row[empresa]."\n");
			}else{			
			echo ("<OPTION VALUE=".$row[id_empresa].">".$row[empresa]."\n");
				
			}
		}	
		mysql_free_result();				
		?>	
		</select>
	</td>					
</tr>
<tr>      	
	<td colspan="2">&nbsp;</td>
</tr>
</table>
</td>
<td width="50%" valign="top">
	<table width="100%" cellpadding="0" cellspacing="0" border="0">
	<tr>      	
		<td>&nbsp;</td>
	</tr>
	<tr>
		<td>&nbsp;<strong>Imagen</strong></td>
	</tr>
	<tr>
		<td><img src="../img/maquines/<? echo $row_edit[foto]; ?>" width="300"></td>
	</tr>
	<tr>      	
		<td>&nbsp;</td>
	</tr>
	</table>
</td>
</tr>
</table>
<table align="center">
<tr>
	<td>
		<input type="hidden" name="id_maquina" value="<? echo $row_edit[id_maquina];?>">
		<input type="Button" class="boto" value="Grabar" onClick="envia();" style="display: inline;float: none;margin: 0;padding: 0;text-align: center;height=20px;width=100px">
		<input type=button value="Cerrar" onClick="window.close()" style="display: inline;float: none;margin: 0;padding: 0;text-align: center;height=20px;width=100px"> 
	</td>
</tr>
</table>
</form>
</body>
</html> 
El problema q tengo es q tarda demasiado al cargar y solo tengo 7 consultas simples

las tablas q uso estan indexadas y las sentencias no son nada complejas, lo unico q el resultado de cada consulta tiene unos 150 registros y con estos relleno los selects.

Como puedo mejor mi indice de carga?


Gracias de antemano,

Saludos
__________________
"Cada hombre es el hijo de su propio trabajo"
Miguel de Cervantes Saavedra
"La experiencia es algo que no consigues hasta justo depués de necesitarla"
Laurence Olivier

Última edición por sergi_climent; 22/03/2006 a las 02:59
  #2 (permalink)  
Antiguo 20/03/2006, 11:59
NHS
 
Fecha de Ingreso: junio-2002
Ubicación: Todos lados
Mensajes: 92
Antigüedad: 15 años, 6 meses
Puntos: 0
pone la estrutura de tu base de datos.

describe tabla
  #3 (permalink)  
Antiguo 21/03/2006, 01:17
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 12 años, 10 meses
Puntos: 10
Pregunta

Buenos dias.
No creo q el fallo este en mi estructura de datos, pero bueno... aqui lo dejo para q opineis y a ver si me ayudais a encontrar una solucion de carga rapida xq sino... esto no me sirve.
Tengo varias Tablas y tengo todos los campos id indexados para q las busquedas vayan mas rapido.

Maquinas.
id_maquina PK
id_tipo_maquina
id_seccion
id_fabricante
id_modelo
id_marca
fecha_compra
numeroserie
...

tipo_maquina
id_tipo_maquina PK
tipo_maquina

Seccion
id_seccion PK
seccion

Fabricante
id_fabricante PK
fabricante

La hoja q cargo es para editar la maquina y tengo q poner todos los select cargados con las diferentes opciones para q puedan escojer... cada select tiene unas 100-150 opciones y hay 4 o 5 como maximo!
supongo q tarda tanto para cargar los select pero no deberia no??? y si es asi como puedo mejorarlo?
son consultas simples: Select id_tal, campo_tal from tabla. y con el resultado lleno un select!

Gracias por su atencion,

saludos
__________________
"Cada hombre es el hijo de su propio trabajo"
Miguel de Cervantes Saavedra
"La experiencia es algo que no consigues hasta justo depués de necesitarla"
Laurence Olivier

Última edición por sergi_climent; 21/03/2006 a las 02:20
  #4 (permalink)  
Antiguo 22/03/2006, 01:13
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 12 años, 10 meses
Puntos: 10
Hola,
alguna idea de como mejorar el rendimiento, es q cargar la pagina de edicion cuesta entre 30-50 segundos! y la verdad q me parece demasiado...
Q soluciones hay?
komo puedo hacer para acelerar el proceso? o almenos dismularlo...

Gracias,
Saludos
__________________
"Cada hombre es el hijo de su propio trabajo"
Miguel de Cervantes Saavedra
"La experiencia es algo que no consigues hasta justo depués de necesitarla"
Laurence Olivier
  #5 (permalink)  
Antiguo 22/03/2006, 07:07
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Aparentemente haces consultas SQL bien simples .. con pocos datos (para los "millones" que podría llegar a gestionar Mysql en casos extremos).

No sé que "hardware" de servidor usas .. pero podrías probar tu código tal cual y tu modelo de datos en otros servidores con otras prestaciones.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #6 (permalink)  
Antiguo 22/03/2006, 11:47
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 12 años, 10 meses
Puntos: 10
El servidor se nos ha quedado un poco pequeño pero sigue siendo una buena maquina. Es un Pentium IV a 2400 y con 2 GB de RAM, y con el SO RED HAT 9.
este es el servidor web... solo hay mysql + php + apache, asi q no hay nada q pueda absorver recurso aparte de mis proyectos q los tengo controlados.
tengo otras bases de datos con varios millones de registros y nunca me habia encontrado en esta situacion... claro q tampoco he probado de cargar 7 selects o combos en una solo pagina...
podria ser por el diseño q tardara tanto ? son 7 selects o combos con unos 150 reg. cada uno, aparte de los campos normales a editar. si hago una por una la muestra bastante rapido, pero al juntarlas en la misma pagina... se hace una eternidad, por decir q tarda casi 1 minutos en cargarse la pagina...

q opciones me quedan?

Gracias de antemano,

saludos
__________________
"Cada hombre es el hijo de su propio trabajo"
Miguel de Cervantes Saavedra
"La experiencia es algo que no consigues hasta justo depués de necesitarla"
Laurence Olivier
  #7 (permalink)  
Antiguo 22/03/2006, 15:46
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Ok, en ese caso ya que dices "7" select's con 150 registros de promedio .. tal vez el problema no sea del "lado del servidor" sino del "cliente" en procesar esa página es decir, a tu navegador y a ese PC que corre ese navegador.

Tienes que tener ese dato presente también. Sobre todo cuando usas javascript y aplicas algún proceso a esos datos que gestionana tus select's ..

De hecho puedes comprobar que tiempo al menos demora PHP en procesar tu página (mejor dicho: generarla). Puedes usar microtime() para tal fin (tomas el tiempo al principio de tu scirpt y al final .. restas y "voalá" obtendras el dato requerido). Así veras tal vez que esa página se genera por PHP en unos 0.xx segundos y el resto corresponderá a la trasnferencia de esos datos por la LAN/Internet hacia el cliente + el tiempo que le demore ese PC/navegador en procesarla.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 23/03/2006, 01:30
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 12 años, 10 meses
Puntos: 10
Buenos dias,
he probado la funcion microtime(), y correcto, cada consulta tarda o.XX segundos, asi q keda descartado q sea un problema de mysql-php!
bueno, la maquina q uso para ver mis proyectos es la mia... q tampoco se queda corta pero bueno... y la LAN va a 10/100, y bueno, con el proyecto q te os he comentado antes, consultas a tablas con varios millones de registros no me va tant lento, pero claro tampoco tengo los selects/combos!
este proyecto es una intranet para el mantenimiento de las maquinas de la empresa donde trabajo, y esta parte es la edicion de maquinas... y tan lento no puede ir...
alguna idea para agilizar esto? aunque sea quitando los combos.. alguna idea?

Gracias por todo,

Saludos
__________________
"Cada hombre es el hijo de su propio trabajo"
Miguel de Cervantes Saavedra
"La experiencia es algo que no consigues hasta justo depués de necesitarla"
Laurence Olivier
  #9 (permalink)  
Antiguo 23/03/2006, 06:00
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por sergi_climent
Buenos dias,
he probado la funcion microtime(), y correcto, cada consulta tarda o.XX segundos, asi q keda descartado q sea un problema de mysql-php!
bueno, la maquina q uso para ver mis proyectos es la mia... q tampoco se queda corta pero bueno... y la LAN va a 10/100, y bueno, con el proyecto q te os he comentado antes, consultas a tablas con varios millones de registros no me va tant lento, pero claro tampoco tengo los selects/combos!
este proyecto es una intranet para el mantenimiento de las maquinas de la empresa donde trabajo, y esta parte es la edicion de maquinas... y tan lento no puede ir...
alguna idea para agilizar esto? aunque sea quitando los combos.. alguna idea?

Gracias por todo,

Saludos
A nivel de optimización .. mmm

Podrías tal vez llamar a esos "select" con esos 150 resultados a elegir uno en una ventana que abras desde el formulario padre. Sé que esto no es muy "usable" pero por lo menos tu página formulario principal no cargaría ni un sólo select .. sino que por algún botón .. abres una ventana, creas tu "select" .. seleccionas el dato y lo pasas a la página padre (todo esto con alto uso de javascript).

También podrías probar técnicas de "Ajax" (tenemos un foro para tal fin). Donde los datos sólo se llaman cuando los usas y no antes, así que "simultánemante" tal vez sólo tendrías un "select" a la vez (justo llamarías a los datos cuando los tengas que seleccionar).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 13:07.