Foros del Web » Programando para Internet » PHP »

Optimizar codigo[por que excede tiempo de ejecucion]

Estas en el tema de Optimizar codigo[por que excede tiempo de ejecucion] en el foro de PHP en Foros del Web. Hola chicos, estoy trabajando en varias tablas para armar una. se analizan 12mil registros y se crean 12mil en otra tabla. el problema es que ...
  #1 (permalink)  
Antiguo 25/08/2011, 17:20
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 2 meses
Puntos: 89
Optimizar codigo[por que excede tiempo de ejecucion]

Hola chicos, estoy trabajando en varias tablas para armar una.
se analizan 12mil registros y se crean 12mil en otra tabla.
el problema es que tengo que sacar informacion de dos tablas mas.
le di 130segundos de ejecucion y todavia falta, no entiendo por que tarda tanto espero que me puedan ayudar.

Código PHP:
Ver original
  1. $SQL_1 = "SELECT dato1,dato2,dato3 FROM concuota_temp WHERE tipo='SO3' ORDER BY `concuota_temp`.`fecha` DESC ";
  2.  
  3. $SO3    =   mysql_query(    $SQL_CONCUOTA   );
  4. $row    =   0;
  5. while(  $r  =   mysql_fetch_array( $SO3 )   )
  6. {  
  7.     $SQL_BUSCAR_DATO    =   "SELECT dato1,dato2,dato3,dato4,dato5,dato6,dato7 FROM compraso_temp WHERE socio='".$r['dato1']."' AND factura='".$r['dato2']."'";
  8.     $QUERY_BUSCAR_DATO = mysql_query( $SQL_BUSCAR_DATO ) or die ( mysql_error() );
  9.     $d = mysql_fetch_assoc( $QUERY_BUSCAR_DATO );
  10.     $SQL_PORCENTAJE = "SELECT dato1,dato2,dato3,dato4,dato5,dato6,dato7,dato8,dato9,dato10,dato11,dato12,dato13 FROM proveedor_temp WHERE id='".$d['dato1']."'";
  11.     $QUERY_PORCENTAJE = mysql_query($SQL_PORCENTAJE);
  12.     $p = mysql_fetch_assoc( $QUERY_PORCENTAJE );
  13.         if ( $r['dato4] == $p['dato1'] )
  14.         {
  15.             $porcentaje = $p['dato6'];
  16.         }elseif( $r['dato4]  == $p['dato2'] )
  17.         {
  18.             $porcentaje = $p['dato7'];
  19.         }elseif( $r['dato4] == $p['dato3'])
  20.         {
  21.             $porcentaje = $p['dato8'];
  22.         }
  23.         $SQL_INSERT =   "INSERT INTO archivo (`columna`,`columna`,`columna`,`columna`,`columna`,`columna`,`columna`,`columna`,`columna`,`columna`,`columna`,`columna`,`columna`) VALUES ('".$d['dato2']."','".$d['dato3']."','".$d['dato4']."','".$d['dato5']."','10:00:00','".$d['dato6']."','$porcentaje','".$d['dato7']."','".$d['dato8']."','".$d['dato9']."','9','1','".$r['dato10']."')";
  24.         mysql_query($SQL_INSERT) or die (mysql_error());
  25.     $row++;
  26. }
  27. mysql_close($db_con);
  28. echo "<p>".$row." Registros agregados en db1.archivo.</p>";

Nota: modifique columna y dato para que no sea pueda entender mas...
La idea es optimizarlo, ya que me parecen poco 12mil. registros.

NOTA:(mysql_fetch_assoc) lo cambie por "mysql_fetch_array" y no tiene cambio alguno.
__________________
Mono programando!
twitter.com/eguimariano
  #2 (permalink)  
Antiguo 25/08/2011, 17:35
Avatar de skiper0125  
Fecha de Ingreso: octubre-2010
Ubicación: $this->Mexico('Toluca');
Mensajes: 1.127
Antigüedad: 13 años, 6 meses
Puntos: 511
Respuesta: Optimizar codigo[por que excede tiempo de ejecucion]

Hola que tal.

¿Y por qué no usas mysql_fetch_row?, ya que esta sentencia ocupa la mitad de memoria que mysql_fetch_array, de esta forma toma menos recursos del servidor.

Y para cambiar el tiempo de ejecución desde código php coloca esto al principio de tu script


Código PHP:
Ver original
  1. if(ini_set("max_execution_time", "0"));

Saludos
__________________
Recuerda que estamos aquí para orientarte, y no para hacer tu trabajo.
Si mi aporte fue de ayuda, recuerda que agradecer no cuesta nada +1

Skiper0125
  #3 (permalink)  
Antiguo 25/08/2011, 17:39
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 2 meses
Puntos: 89
Respuesta: Optimizar codigo[por que excede tiempo de ejecucion]

Cita:
Iniciado por skiper0125 Ver Mensaje
Hola que tal.

¿Y por qué no usas mysql_fetch_row?.......
Gracias skiper por comentar.
te cuento que estoy utilizando:
SELECT columna,columna2,columna3 FROM tabla WHERE id='dato'
y con mysql_fetch_row
me sale que:
columna no esta definida
columna2 no esta definida
columna3 no esta definida
__________________
Mono programando!
twitter.com/eguimariano
  #4 (permalink)  
Antiguo 25/08/2011, 20:09
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Optimizar codigo[por que excede tiempo de ejecucion]

No veo que hagas calculos con la informacion como para realizar tantas consultas, supongo que podrias usar JOIN:

Código SQL:
Ver original
  1. SELECT tabla1.dato1, tabla1.dato2, tabla1.datoX, tabla2.dato1, tabla2.datoX, tablaX.datoX
  2.     FROM tabla1
  3.     JOIN tabla2 ON tabla1.dato1 = tabla2.dato1 AND tabla1.datoX = tabla2.datoX
  4.     JOIN tablaX ON tablaX.dato1 = tabla2.dato1
  5.     WHERE tabla1.tipo = 'S03' ORDER BY tabla1.fecha DESC

Creo que eso deberia hacer mas ligero el proceso.
__________________
- León, Guanajuato
- GV-Foto
  #5 (permalink)  
Antiguo 25/08/2011, 20:56
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Optimizar codigo[por que excede tiempo de ejecucion]

Cita:
Iniciado por SirDuque Ver Mensaje
Gracias skiper por comentar.
te cuento que estoy utilizando:
SELECT columna,columna2,columna3 FROM tabla WHERE id='dato'
y con mysql_fetch_row
me sale que:
columna no esta definida
columna2 no esta definida
columna3 no esta definida
mysql_fetch_row no trae los resultados en un array asociativo como lo hace mysql_fetch_assoc o mysql_fetch_array.

Sin embargo, nunca he visto ningun articulo ni nada sobre mysql_fetch_row siendo mas rapido que mysql_fetch_array (Algun enlace porfavor?)

Mi recomendación: Haz lo que te indico Triby + realiza un SOLO INSERT.
Es decir, en vez de por cada iteracion ir haciendo un INSERT, ve juntandolos todos.

Código PHP:
Ver original
  1. $sql = "INSERT INTO tabla VALUES ";
  2. $rows = array();
  3. foreach($resultado as $row) {
  4.   $rows[] = "('columna1', 'columna2')"
  5. }
  6. $sql .= implode(", ", $rows);

Tambien hay otros tips, dependiendo del engine que estes usando:
http://dev.mysql.com/doc/refman/5.5/...a-loading.html
http://dev.mysql.com/doc/refman/5.5/...a-loading.html
  #6 (permalink)  
Antiguo 26/08/2011, 14:04
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 2 meses
Puntos: 89
De acuerdo Respuesta: Optimizar codigo[por que excede tiempo de ejecucion]

Cita:
Iniciado por Triby Ver Mensaje
No veo que hagas calculos con la informacion como para realizar tantas consultas, supongo que podrias usar JOIN .......
Bueno me gusto mucha esa respuesta....
Cambie
tabla1 por concuota_temp
tabla2 por compraso_temp
tabla3 por proveedor_temp

(soy muy nuevo)
si no mal interpreto la busqueda se basa en esta sentencia:

WHERE concuota_temp.tipo = 'S03' ORDER BY concuota_temp.fecha DESC";

(SELECT periodo,factura,concepto,socio,periodo FROM concuota_temp WHERE tipo='SO3' ORDER BY `concuota_temp`.`fecha` DESC)

Este JOIN es el mismo mysql_fetch_array que uso en mi codigo:

JOIN compraso_temp ON concuota_temp.factura = compraso_temp.factura AND concuota_temp.socio = compraso_temp.socio

(SELECT proveedor,socio,importe_factura,fecha_factura,conc epto,cuotas,opera FROM compraso_temp WHERE socio='".$r['socio']."' AND factura='".$r['factura']."')

y este otro:

JOIN proveedor_temp ON proveedor_temp.id = compraso_temp.proveedor

(SELECT concepto,concepto2,concepto3,concepto4,concepto5,p orcentaje,porcentaje2,porcentaje3,porcentaje4,porc entaje5 FROM proveedor_temp WHERE id='".$d['proveedor']."')

Ahora dentro del WHILE me arroja 0 resultados, en ves de 12mil, alguien tiene una idea? por que... uso mal el mysql_fetch_array (?)

Código PHP:
Ver original
  1. $SQL_CONCUOTA   ="SELECT concuota_temp.periodo, concuota_temp.factura, concuota_temp.concepto, concuota_temp.socio, concuota_temp.periodo, compraso_temp.proveedor, compraso_temp.importe_factura, compraso_temp.fecha_factura, compraso_temp.cuotas, compraso_temp.opera, proveedor_temp.concepto1, proveedor_temp.concepto2, proveedor_temp.concepto3, proveedor_temp.concepto4, proveedor_temp.concepto5, proveedor_temp.porcentaje1, proveedor_temp.porcentaje2, proveedor_temp.porcentaje3, proveedor_temp.porcentaje4, proveedor_temp.porcentaje5 FROM concuota_temp
  2. JOIN compraso_temp ON concuota_temp.factura = compraso_temp.factura AND concuota_temp.socio = compraso_temp.socio
  3. JOIN proveedor_temp ON proveedor_temp.id = compraso_temp.proveedor
  4. WHERE concuota_temp.tipo = 'S03'
  5. ORDER BY concuota_temp.fecha DESC";
  6.  
  7. $SO3    =   mysql_query(    $SQL_CONCUOTA   );
  8. $row    =   0;
  9. while(  $r  =   mysql_fetch_array( $SO3 )   )
  10. {
  11.     $row++;
  12. }
  13. mysql_close($db_con);
  14. echo "<p>".$row." Registros agregados en db1.archivo (Compras con proveedor).</p>";

termino con esto y continuo con la respuesta de : Ronruby
__________________
Mono programando!
twitter.com/eguimariano
  #7 (permalink)  
Antiguo 26/08/2011, 18:34
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Optimizar codigo[por que excede tiempo de ejecucion]

Intenta ejecutar la consulta en PHPMyAdmin, pero en este orden:

1. Haz primero la consulta sin JOINS, te devuelve los resultados esperados?
2. Agrega el JOIN de la primera tabla, sigue funcionando?
3. Agrega el JOIN de la segunda tabla... no estoy muy seguro, pero, podria ser que el campo de provedor_temp.id tenga un equivalente en concuota_temp? si es asi, cambia la condicion del JOIN para que sea con ese campo.

Cuando ya todo funcione correctamente, entonces copias la consulta de PHPMyAdmin a tu script y listo.
__________________
- León, Guanajuato
- GV-Foto
  #8 (permalink)  
Antiguo 26/08/2011, 19:19
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 2 meses
Puntos: 89
Respuesta: Optimizar codigo[por que excede tiempo de ejecucion]

Cita:
Iniciado por Triby Ver Mensaje
1. Haz primero la consulta sin JOINS, te devuelve los resultados esperados?
2. Agrega el JOIN de la primera tabla, sigue funcionando?
3. Agrega el JOIN de la segunda tabla... no estoy muy seguro, pero, podria ser que el campo de provedor_temp.id tenga un equivalente en concuota_temp? si es asi, cambia la condicion del JOIN para que sea con ese campo.
Gracias a esos pasos encontre el error, en un copy&pase se filtro un '0' en ves de una 'o' en el WHERE:

WHERE concuota_temp.tipo = 'S03' ORDER BY concuota_temp.fecha DESC

WHERE concuota_temp.tipo = 'SO3' ORDER BY concuota_temp.fecha DESC

La consulta anda 10 puntos logro resolver todos los registros dentro de los 130Seg.

Ahora continuo con Ronruby y les cuento.

Grax Triby
__________________
Mono programando!
twitter.com/eguimariano
  #9 (permalink)  
Antiguo 26/08/2011, 20:07
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 2 meses
Puntos: 89
Respuesta: Optimizar codigo[por que excede tiempo de ejecucion]

Cita:
Iniciado por Ronruby Ver Mensaje
mysql_fetch_row no trae los resultados en un array asociativo como lo hace mysql_fetch_assoc o mysql_fetch_array.

Sin embargo, nunca he visto ningun articulo ni nada sobre mysql_fetch_row siendo mas rapido que mysql_fetch_array (Algun enlace porfavor?)

Mi recomendación: Haz lo que te indico Triby + realiza un SOLO INSERT.
Es decir, en vez de por cada iteracion ir haciendo un INSERT, ve juntandolos todos.

Código PHP:
Ver original
  1. $sql = "INSERT INTO tabla VALUES ";
  2. $rows = array();
  3. foreach($resultado as $row) {
  4.   $rows[] = "('columna1', 'columna2')"
  5. }
  6. $sql .= implode(", ", $rows);

Tambien hay otros tips, dependiendo del engine que estes usando:
http://dev.mysql.com/doc/refman/5.5/...a-loading.html
http://dev.mysql.com/doc/refman/5.5/...a-loading.html
Gracias Ronruby lei los tips de mysql.com y puse en practica el codigo que me ofreces...

Les cuento que el resultado fue:
Cita:

7638 Registros agregados en db1.archivo (Compras con proveedor).

tardó en ejecutarse: 70.395826101303 Segundos
__________________
Mono programando!
twitter.com/eguimariano
  #10 (permalink)  
Antiguo 26/08/2011, 20:21
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Optimizar codigo[por que excede tiempo de ejecucion]

Una pregunta, ¿cuanto tarda tu consulta en correr cuando la pones en phpMyAdmin?
Me da curiosidad saber si tarda mucho para verificar si algunos indices pueden optimizarla aun mas.
  #11 (permalink)  
Antiguo 26/08/2011, 20:25
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 2 meses
Puntos: 89
Respuesta: Optimizar codigo[por que excede tiempo de ejecucion]

Cita:
Iniciado por Ronruby Ver Mensaje
Una pregunta, ¿cuanto tarda tu consulta en correr cuando la pones en phpMyAdmin?
Me da curiosidad saber si tarda mucho para verificar si algunos indices pueden optimizarla aun mas.
Showing rows 0 - 29 (7,638 total, Query took 69.6617 sec)

La consulta sola, tarda eso :(
__________________
Mono programando!
twitter.com/eguimariano
  #12 (permalink)  
Antiguo 26/08/2011, 20:29
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Optimizar codigo[por que excede tiempo de ejecucion]

Ahora hagamos lo siguiente ... Pon EXPLAIN al principio de tu consulta de modo que quede:
EXPLAIN SELECT .......

Pon los resultados aqui ;)
  #13 (permalink)  
Antiguo 27/08/2011, 06:44
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 2 meses
Puntos: 89
Respuesta: Optimizar codigo[por que excede tiempo de ejecucion]

Cita:
Iniciado por Ronruby Ver Mensaje
Ahora hagamos lo siguiente ... Pon EXPLAIN al principio de tu consulta de modo que quede:
EXPLAIN SELECT .......

Pon los resultados aqui ;)
La consulta se resuelve en segundos... pero no trae los datos que nos interesan...
en PHPmyAdmin solo trae 3 lineas
Código HTML:
id  select_type  table  type  possible_keys  key  key_len  ref  rows  Extra  
1 SIMPLE concuota_temp ALL NULL NULL NULL NULL 13334 Using where; Using temporary; Using filesort 
1 SIMPLE compraso_temp ALL NULL NULL NULL NULL 52187 Using where; Using join buffer 
1 SIMPLE proveedor_temp eq_ref PRIMARY PRIMARY 4 db1.compraso_temp.proveedor 1   



y en el script error, no definidas las variables(todas)....

:(
__________________
Mono programando!
twitter.com/eguimariano
  #14 (permalink)  
Antiguo 27/08/2011, 07:36
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Optimizar codigo[por que excede tiempo de ejecucion]

Si te fijas en el resultado las dos primeras tablas no estan usando ningun indice. La primera tiene que buscar en 13,000 registros mientras que la otra busca en 52,000.

Muestrame como tienes la consulta ahora para ver a que campos conviene ponerle indices.
  #15 (permalink)  
Antiguo 27/08/2011, 09:37
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 2 meses
Puntos: 89
Respuesta: Optimizar codigo[por que excede tiempo de ejecucion]

No te entendi pero ak esta la consulta
Código MySQL:
Ver original
  1. SELECT concuota_temp.periodo, concuota_temp.factura, concuota_temp.concepto, concuota_temp.socio, concuota_temp.periodo, compraso_temp.proveedor, compraso_temp.importe_factura, compraso_temp.fecha_factura, compraso_temp.cuotas, compraso_temp.opera, proveedor_temp.concepto1, proveedor_temp.concepto2, proveedor_temp.concepto3, proveedor_temp.concepto4, proveedor_temp.concepto5, proveedor_temp.porcentaje1, proveedor_temp.porcentaje2, proveedor_temp.porcentaje3, proveedor_temp.porcentaje4, proveedor_temp.porcentaje5
  2. FROM concuota_temp
  3. JOIN compraso_temp ON concuota_temp.factura = compraso_temp.factura AND concuota_temp.socio = compraso_temp.socio
  4. JOIN proveedor_temp ON proveedor_temp.id = compraso_temp.proveedor
  5. WHERE concuota_temp.tipo = 'SO3'
  6. ORDER BY concuota_temp.fecha DESC
__________________
Mono programando!
twitter.com/eguimariano
  #16 (permalink)  
Antiguo 27/08/2011, 13:27
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Optimizar codigo[por que excede tiempo de ejecucion]

Jajajaja ... En este link puedes verificar a lo que me refiero.

Haz lo siguiente, en phpMyAdmin corre las siguientes consultas:
Código MySQL:
Ver original
  1. ALTER TABLE  `concuota_temp` ADD INDEX (  `factura` );
  2. ALTER TABLE  `compraso_temp` ADD INDEX (  `factura` );
  3. ALTER TABLE  `concuota_temp` ADD INDEX (  `socio` );
  4. ALTER TABLE  `compraso_temp` ADD INDEX (  `socio` );
  5. ALTER TABLE  `compraso_temp` ADD INDEX (  `proveedor` );
  6. ALTER TABLE  `concuota_temp` ADD INDEX (  `tipo` );
  7.  
  8. ANALYZE TABLE `concuota_temp`;
  9. OPTIMIZE TABLE `concuota_temp`;
  10. ANALYZE TABLE `compraso_temp`;
  11. OPTIMIZE TABLE `compraso_temp`;

Puede tomar un momentico para completar. Corre esas sentencias y luego vuelve y corre tu consulta con EXPLAIN y muestrame los resultados. Tambien correla normal (sin explain) para ver cuanto tiempo toma ahora.
  #17 (permalink)  
Antiguo 27/08/2011, 14:50
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 2 meses
Puntos: 89
Respuesta: Optimizar codigo[por que excede tiempo de ejecucion]

Wow!
despues de correr el codigo, volvi hacer la consulta y el resultado lo entrego en medio segundo....

el EXPLAIN entrego:

Código MySQL:
Ver original
  1. id  select_type  table  type  possible_keys  key  key_len  ref  rows  Extra  
  2. 1 SIMPLE concuota_temp ref factura,socio,tipo tipo 12 const 7432 Using where; Using filesort
  3. 1 SIMPLE compraso_temp ref factura,socio,proveedor factura 4 db1.concuota_temp.factura 2 Using where
  4. 1 SIMPLE proveedor_temp eq_ref PRIMARY PRIMARY 4 db1.compraso_temp.proveedor 1

No soy muy bueno en ingles y google traduce mal xD pero entendi algo. Si podes aclararme un poco, que fue lo que paso, te lo agradeceria...

Tengo que colocar Index a las tablas que utilizo continuamente para buscar o que tengan relacion con otra tabla?
__________________
Mono programando!
twitter.com/eguimariano
  #18 (permalink)  
Antiguo 27/08/2011, 15:01
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Optimizar codigo[por que excede tiempo de ejecucion]

Cita:
Wow!
despues de correr el codigo, volvi hacer la consulta y el resultado lo entrego en medio segundo....
xD Como me gusta, MySQL es bastante eficientes con la configuracion adecuada.

Cita:
No soy muy bueno en ingles y google traduce mal xD pero entendi algo. Si podes aclararme un poco, que fue lo que paso, te lo agradeceria...

Tengo que colocar Index a las tablas que utilizo continuamente para buscar o que tengan relacion con otra tabla?
Te explico, a mi manera claro ...

Digamos que tienes un libro, dentro de ese libro quieres buscar cierta información. Sin un indice debes ir página por página hasta encontrar lo que quieres. MySQL funciona de la misma manera. Las tablas, cuando buscas una información, sin índices, MySQL busca dentro de TODA la tabla hasta que encuentra la información. Lo que consume mucho tiempo es cuando pides varias cosas a MySQL. Empieza desde el 1er registro hasta el ultimo por CADA cosa que le pides (en una clausula WHERE por ejemplo).
Sin embargo, con los indices, MySQL sabe exactamente a donde ir para conseguir la información. Imaginate el caso de tener que buscar en millones de registros uno por uno vs ir directamente a donde se necesita.

Ahora, ¿como sabes a cuales campos debes agregarles indices? Siempre y cuando el campo sea usado para FILTRAR o BUSCAR sobre la tabla, agrega un indice. Te das cuenta en los campos que utilizas en un WHERE y los que unen tablas con un JOIN.
Eso fue lo que hicimos con tu consulta; agregamos indices para que MySQL sepa donde buscar la información y por lo tanto se tome muchísimo menos tiempo.

;) Me alegra saber que de +130 segundos, ahora lo realiza en 1 xD. <3 Optimización.
  #19 (permalink)  
Antiguo 27/08/2011, 17:05
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 2 meses
Puntos: 89
Respuesta: Optimizar codigo[por que excede tiempo de ejecucion]

Gracias Triby y gracias Roruby la verdad la consulta y el codigo fueron Optimizados!
En este teard aprendi JOIN, multiples INSERT, INDEX y EXPLAIN.

Toda una escuela ForosdelWeb
__________________
Mono programando!
twitter.com/eguimariano
  #20 (permalink)  
Antiguo 28/08/2011, 09:32
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 2 meses
Puntos: 89
Respuesta: Optimizar codigo[por que excede tiempo de ejecucion]

Pregunta:
Estoy implementando esto en todas las tablas...
y proyectando en lo que va a pasar mas adelante...


¿Tengo que utilizarlo frecuentemente?...
Ya que se me ocurrio que se agregan y actualizan datos. Y si lo comparamos con un libro, el indece seria obsoleto.
__________________
Mono programando!
twitter.com/eguimariano
  #21 (permalink)  
Antiguo 28/08/2011, 10:56
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Optimizar codigo[por que excede tiempo de ejecucion]

Correlos de vez en cuando, pero no siempre.

http://dev.mysql.com/doc/refman/5.0/...yze-table.html
http://dev.mysql.com/doc/refman/5.1/...ize-table.html

Depende mas de la cantidad de tráfico que tiene tu servidor. Si es poco, raramente tendras que utilizar esas sentencias.

Etiquetas: mysql, registro, sql, tabla
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

SíEste tema le ha gustado a 3 personas




La zona horaria es GMT -6. Ahora son las 18:49.