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

Query - Demasiado tiempo

Estas en el tema de Query - Demasiado tiempo en el foro de Bases de Datos General en Foros del Web. Que tal, tengo un problema con este query ya que si bien, si funciona, este se tarda demasiado, por la gran cantidad de registros que ...
  #1 (permalink)  
Antiguo 07/02/2006, 14:06
 
Fecha de Ingreso: octubre-2004
Ubicación: Guatemala
Mensajes: 83
Antigüedad: 19 años, 6 meses
Puntos: 0
Query - Demasiado tiempo

Que tal, tengo un problema con este query ya que si bien, si funciona, este se tarda demasiado, por la gran cantidad de registros que se tienen en la tabla, y yo espero que a alguien tenga una solución ya sea utilizando joins o algo por el estilo.

Les explico la tabla ordenesresultados contiene un campo denominado orden que a la vez contiene resultados, o sea, una orden puede tener varios resultados. Algo asi:

orden sucursal sector estudio fechaalta
1 1 2 5 12/01/2005 00:00:00
1 1 2 6 12/01/2005 00:00:00
2 1 2 6 12/01/2005 02:00:00
2 1 2 6 12/01/2005 02:00:00
3 1 2 6 12/01/2005 04:00:00

mientras que de la tabla validaciones unicamente me interesa un campo de fecha

orden fechahora
1 12/01/2005 00:00:00
2 12/01/2005 01:00:00
3 12/02/2005 01:00:00

El query que estoy utilizando es el siguiente:

select ordenesresultados.orden, ordenesresultados.fechaalta, validaciones.fechahora
from ordenesresultados, validaciones
where ordenesresultados.sucursal=1
And ordenesresultados.sector=3
And ordenesresultados.fechaalta>='12/01/2005 00:00:00'
And ordenesresultados.fechaalta<='12/02/2005 23:59:59'
And validaciones.orden=ordenesresultados.orden
order by ordenesresultados.orden

El problema es que me devuelve todas las ordenes de la tabla ordenesresultados, ya que como puse en el ejemplo, estas pueden repetirse, y no he logrado que me devuelva solo una, ya que al poner distinct este me hace comparaciones con la tabla validaciones, por lo que siempre me devuelve la misma orden las veces que se repita en la tabla ordenesresultados.

Cualquier ayuda, sera bien recibida.
__________________
Definitivamente la vida no es como en las películas...
C'est la vie
  #2 (permalink)  
Antiguo 08/02/2006, 06:06
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Primero, acostumbrate a utlizar joins, mejorará el rendimiento:
Código:
select ordenesresultados.orden, ordenesresultados.fechaalta, validaciones.fechahora
from ordenesresultados inner join validaciones
on validaciones.orden=ordenesresultados.orden
where ordenesresultados.sucursal=1
And ordenesresultados.sector=3
And ordenesresultados.fechaalta>='12/01/2005 00:00:00'
And ordenesresultados.fechaalta<='12/02/2005 23:59:59'
order by ordenesresultados.orden
Segundo, si no quieres que te salgan todos las ordenas, debes definir cual quieres que te salga.
  #3 (permalink)  
Antiguo 08/02/2006, 10:46
 
Fecha de Ingreso: octubre-2004
Ubicación: Guatemala
Mensajes: 83
Antigüedad: 19 años, 6 meses
Puntos: 0
Con los joins tienes razon, sin embargo no me sirven de mucho en este caso.
Me explico, el siguiente query me devuelve los valores de los cuales quiero encontrar el campo fechahora en la tabla validaciones

Código:
select distinct ordenesresultados.orden, ordenesresultados.fechaalta
from ordenesresultados
where ordenesresultados.sucursal=1 
And ordenesresultados.sector=3 
And ordenesresultados.fechaalta>='12/01/2006 00:00:00'
And ordenesresultados.fechaalta<='12/01/2006 23:59:59'
order by ordenesresultados.orden
Notese que uso distinct, porque en la tabla ordenesresultados se repiten las ordenes. Ahora el asunto es que en la tabla validaciones tambien se repite el campo ordenes, pero a mi solo me interesa el valor máximo de fechahora.

Utilizando php y realizando una query por cada resultado del query de arriba, los valores me los devuelve en 90 o mas segundos, y eso es demasiado tiempo.

Gracias por la atención y estaré esperando cualquier ayuda que me puedan proporcionar.
__________________
Definitivamente la vida no es como en las películas...
C'est la vie
  #4 (permalink)  
Antiguo 08/02/2006, 13:09
 
Fecha de Ingreso: octubre-2004
Ubicación: Guatemala
Mensajes: 83
Antigüedad: 19 años, 6 meses
Puntos: 0
Jovenes lo he resuelto talvez no de la mejor manera, pero lo he hecho, he utilizado 2 views que me simplifican mucho el trabajo, mi duda es que tan bueno o malo es hacer eso, utilizar views en lugar de una super query.
__________________
Definitivamente la vida no es como en las películas...
C'est la vie
  #5 (permalink)  
Antiguo 09/02/2006, 01:37
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
No hay ningún problema. Pero te quería comentar que el principal motivo de que se ralentice tu consulta es el distinct, si por ejemplo utilizaras una subquery para obtener unicamente un id de orden te sería más fluida.
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 16:45.