Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Mejorar tiempo de consulta a base de datos

Estas en el tema de Mejorar tiempo de consulta a base de datos en el foro de C/C++ en Foros del Web. Hola,estoy revisando un programa de gestion de horas y recursos en c++builder y tengo una serie de consultas a bases de datos que tardan demasiado. ...
  #1 (permalink)  
Antiguo 03/01/2008, 05:22
 
Fecha de Ingreso: enero-2008
Mensajes: 3
Antigüedad: 16 años, 3 meses
Puntos: 0
Mejorar tiempo de consulta a base de datos

Hola,estoy revisando un programa de gestion de horas y recursos en c++builder y tengo una serie de consultas a bases de datos que tardan demasiado. A ver si alguien se le ocurre algo que mejore el retardo. Una de las consultas es:

DM->QTHoraDesc->Close();
DM->QTHoraDesc->SQL->Clear();
DM->QTHoraDesc->SQL->Text = "Select distinct * from H, S, P, A, X
where P.codarea=A.codarea and
P.codsector=A.codsector=X.codsector and P.codproyecto=S.codproyecto=H.codproyecto
AND H.codsubpro=S.codsubpro
AND H.USUARIO = '" + frmEntrada->cmbNombrePersona->Text + "'
AND H.FECHA >= '" + fechaInferior + "' AND H.FECHA <= '" + fechaSuperior + "' ORDER BY H.FECHA DESC";
DM->QTHoraDesc->Open();
  #2 (permalink)  
Antiguo 04/01/2008, 22:07
Avatar de TolaWare
Colaborador
 
Fecha de Ingreso: julio-2005
Mensajes: 4.352
Antigüedad: 18 años, 9 meses
Puntos: 24
Re: Mejorar tiempo de consulta a base de datos

El primer cuello de botella, es que haces una multiplicación cartesiana de 5 tablas, lo cual ya es bastante lento.

El segundo cuello de botella que veo es que estas ordenando el resultado de la consulta por un campo que probablemente no está indexado.

Primero, considera el uso de INNER JOIN en ves de la multiplicación cartesiana.
Segundo, creale un índice a los campos por cuales ordenes.
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 10:20.