Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Query Demorado En Mysql

Estas en el tema de Query Demorado En Mysql en el foro de Mysql en Foros del Web. Tengo el siguiente query pero se demora mucho, hay otra forma de hacerlo y que no se demore tanto. podria ser porque estoy utilizando el ...
  #1 (permalink)  
Antiguo 21/07/2006, 11:21
 
Fecha de Ingreso: abril-2005
Ubicación: colombia
Mensajes: 242
Antigüedad: 19 años
Puntos: 0
Query Demorado En Mysql

Tengo el siguiente query pero se demora mucho, hay otra forma de hacerlo y que no se demore tanto. podria ser porque estoy utilizando el NOT IN .

SELECT cli.con,cli.sucursal FROM tbclientes_db as cli,tbclientes_us AS us WHERE cli.con NOT IN (SELECT cliente FROM tbacum_art_cliente_diario WHERE fecha = '$fechaCal2') and us.tipo = '2' AND cli.con = us.cli

gracias
__________________
:aplauso: Ivomat
  #2 (permalink)  
Antiguo 21/07/2006, 13:13
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
He visto que las subconsultas son muy útiles, dado que facilitan la escritura de la consulta, pero en algunos casos la ejecucion de ésta es muy lenta.
Imagino que los problemas de lentitud pueden ser mitigados con un mejor diseño de la bd o agregando tablas resumen, pero no me he dado nunca dicho trabajo.
La solución que uso es comparar el operador IN o NOT IN con un arreglo, que creo usando otra consulta, asi:

1) hago esta consulta:

SELECT cliente FROM tbacum_art_cliente_diario WHERE fecha = '$fechaCal2'

con los datos construyo una cadena que tiene esta estructura:

('cliente1','cliente2','cliente3', ..., 'clienten')

2) ejecuto la consulta completa asi:

SELECT cli.con,cli.sucursal FROM tbclientes_db as cli,tbclientes_us AS us WHERE cli.con NOT IN ('cliente1','cliente2','cliente3', ..., 'clienten') and us.tipo = '2' AND cli.con = us.cli

Se nota el cambio en el rendimiento.
  #3 (permalink)  
Antiguo 25/07/2006, 11:05
 
Fecha de Ingreso: abril-2005
Ubicación: colombia
Mensajes: 242
Antigüedad: 19 años
Puntos: 0
como construyo esa cadena $cadena = ??????. es que mis tablas tienes millones de registros .

gracias
__________________
:aplauso: Ivomat
  #4 (permalink)  
Antiguo 25/07/2006, 15:06
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
En php, asi:

Código PHP:
<?php
   
//construyo la cadena concatenando los clientes
   
$sql="SELECT cliente FROM tbacum_art_cliente_diario WHERE fecha = '$fechaCal2'";
   
$clientes="(";
   
$rs=mysql_query($sql);
   if(isset(
$rs) && mysql_num_rows($rs)>0)
   {
        
$fila=mysql_fetch_assoc($rs);
        
$clientes.="'".$fila['cliente']."',";
   }
   
$clientes=substr($clientes,0,strlen($clientes)-1).")";

   
//la variable $clientes contiene un arreglo sql del tipo: ('cliente1',...)
   //con ella construyo la sentencia definitiva
   
$sql="SELECT cli.con,cli.sucursal FROM tbclientes_db as cli,tbclientes_us AS us WHERE cli.con NOT IN $clientes and us.tipo = '2' AND cli.con = us.cli"
   
$rs=mysql_query($sql);
   ....
?>
Pruébalo.
  #5 (permalink)  
Antiguo 01/08/2006, 15:35
Avatar de diegopedro  
Fecha de Ingreso: agosto-2006
Ubicación: Santiago
Mensajes: 120
Antigüedad: 17 años, 9 meses
Puntos: 0
Prueba con esto

OJO VERIFICA LOS INDICES QUE TIENES SON DE MUCHA UTILIDAD AL MOMENTO DE BUSCAR DATOS
------------------------
SELECT cli.con,cli.sucursal
FROM tbclientes_db as cli
,tbclientes_us AS us
WHERE NOT EXISTS (
SELECT 'x'
FROM tbacum_art_cliente_diario
WHERE cli1.cliente=cli.con
AND fecha = '$fechaCal2'
)
and us.tipo = '2'
AND us.cli = cli.con
------------------------
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 11:56.