Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Optimizar consulta BD

Estas en el tema de Optimizar consulta BD en el foro de Visual Basic clásico en Foros del Web. Necesito si pueden ayudarme a optimizar una consulta a varias tabla de access El sistema corre en 3 pc y lo que hace es administrar ...
  #1 (permalink)  
Antiguo 29/10/2012, 18:37
 
Fecha de Ingreso: abril-2004
Mensajes: 14
Antigüedad: 20 años
Puntos: 0
Optimizar consulta BD

Necesito si pueden ayudarme a optimizar una consulta a varias tabla de access

El sistema corre en 3 pc y lo que hace es administrar los siniestros de un estudio de abogados, al principio mientras la base era mas chiva funcionaba bien, el modulo donde tengo problemas (tiempo de carga) es el del listado de todos los informes, alrededor de 9500, mediante un combobox puedo seleccionar una de las compañías o todos y en otro el estado (pendientes/cerrados/anulados/todos)

El problema del tiempo de carga lo tengo solamente cuando consulto "todas las compañías y todos los estados" o "todas las compañías y los informes cerrados"

las tablas son:

Informes
id_inf,id_com,id_ges,id_emp,tip_inf,nsi_inf,nsm_in f,ase_inf,vic_inf,reg_inf,zon_inf,obs_inf,tip_acc, est_acc,ob_inf,rec_inf,vto_inf,ent_inf,est_inf,fac _inf

gestionadores
id_ges,id_com,ape_ges,nom_ges,adi_ges,est_ges

companias
id_com,nom_com,dir_com,loc_com,cuit

empleados
id_emp,ape_emp,nom_emp,dni_emp,dir_emp,loc_emp,tel _emp,cel_emp,mai_emp,reg_emp,zon_emp,ing_emp,egr_e mp,est_emp

accidentes
tip_acc,tipo

estados
est_acc,estado

La consulta de que me genera problemas la realizo de la siguientes manera (en estos no utilizo los combos ya que ambos son "todos" ) y la muestro en un lisview

Código:
ssql = "SELECT id_inf,vto_inf,rec_inf,ase_inf,tip_inf,nsi_inf,nsm_inf, vic_inf,reg_inf,zon_inf,obs_inf,ent_inf,ob_inf,est_inf,nom_com,ape_ges,nom_ges,ape_emp,nom_emp 	,tipo,estado,informes.id_emp " _
               & "FROM informes,gestionadores,companias,empleados,accidentes,estados " _
               & "WHERE informes.id_com=companias.id_com AND informes.id_ges=gestionadores.id_ges AND gestionadores.id_com=informes.id_com AND 	informes.tip_acc=accidentes.tip_acc AND informes.est_acc=estados.est_acc AND informes.id_emp=empleados.id_emp ORDER BY est_inf desc, vto_inf desc"
Código:
If Not (RsEmpleados.BOF And RsEmpleados.EOF) Then
  While Not RsEmpleados.EOF
    Set ObjItem = LV.ListItems.Add(, , RsEmpleados!id_inf)
    If RsEmpleados!vto_inf = #1/1/1900# Then
        ObjItem.SubItems(1) = "Sin Datos"
    Else
        ObjItem.SubItems(1) = RsEmpleados!vto_inf
    End If
    ObjItem.SubItems(2) = RsEmpleados!nom_com
    If RsEmpleados!rec_inf = #1/1/1900# Then
        ObjItem.SubItems(3) = "Sin Datos"
    Else
        ObjItem.SubItems(3) = RsEmpleados!rec_inf
    End If
    ObjItem.SubItems(4) = RsEmpleados!ase_inf
    If RsEmpleados!tip_inf = "S" Then
        ObjItem.SubItems(5) = "Simple"
        ObjItem.SubItems(6) = RsEmpleados!nsi_inf
    Else
        ObjItem.SubItems(5) = "Multiple"
        ObjItem.SubItems(6) = RsEmpleados!nsi_inf & " / " & RsEmpleados!nsm_inf
    End If
    ObjItem.SubItems(7) = RsEmpleados!vic_inf
    ObjItem.SubItems(8) = RsEmpleados!reg_inf
    ObjItem.SubItems(9) = RsEmpleados!zon_inf
    ObjItem.SubItems(10) = RsEmpleados!ape_ges & ", " & RsEmpleados!nom_ges
    If RsEmpleados!ape_emp = "" Then
        ObjItem.SubItems(11) = "Sin Datos"
    Else
        ObjItem.SubItems(11) = RsEmpleados!ape_emp & ", " & RsEmpleados!nom_emp
    End If
    ObjItem.SubItems(12) = RsEmpleados!obs_inf
    If RsEmpleados!ent_inf = #1/1/1900# Then
        ObjItem.SubItems(13) = "Sin Datos"
    Else
        ObjItem.SubItems(13) = RsEmpleados!ent_inf
    End If
    ObjItem.SubItems(14) = RsEmpleados!tipo
    ObjItem.SubItems(15) = RsEmpleados!estado
    ObjItem.SubItems(16) = RsEmpleados!ob_inf
    If RsEmpleados!est_inf = "C" Then
        ObjItem.SubItems(17) = "Cerrado"
        TotInf = TotInf + 1
    ElseIf RsEmpleados!est_inf = "A" Then
        ObjItem.SubItems(17) = "Anulado"
        TotAnu = TotAnu + 1
    Else
        ObjItem.SubItems(17) = "Pendiente"
        TotInf = TotInf + 1
    End If
    RsEmpleados.MoveNext
  Wend
End If
Estuve tratando de hacer las consultas mas reducidas (consultando menos campos) pero sigue tardando mucho.
Ahora se me ocurrió paginar el listview o utilizar un recordset desconectado.

Me podrán orientar y recomendar lo mejor.

Gracias.
  #2 (permalink)  
Antiguo 29/10/2012, 21:06
 
Fecha de Ingreso: octubre-2012
Mensajes: 13
Antigüedad: 11 años, 6 meses
Puntos: 1
Respuesta: Optimizar consulta BD

Te recomiendo ponerle limites a la consulta, por ejemplo fecha, que se puedan ver todos los registros pero por cada año y no desde el origen de los tiempo; o consultas solo por estado, etc
  #3 (permalink)  
Antiguo 29/10/2012, 23:36
 
Fecha de Ingreso: abril-2004
Mensajes: 14
Antigüedad: 20 años
Puntos: 0
Respuesta: Optimizar consulta BD

Gracias por la pronta respuesta.

En realidad ya utilizo filtros por estados, compañías, etc, el problema es cuando consultan el histórico de los cerrados, una buena alternativa es por años como me decís, lo voy a consultar con mi cliente.

Ahora el tema de la paginación o el recodrset desconectado no me ayudaría a ser mas rápida la consulta?
  #4 (permalink)  
Antiguo 31/10/2012, 17:07
 
Fecha de Ingreso: octubre-2012
Mensajes: 13
Antigüedad: 11 años, 6 meses
Puntos: 1
Respuesta: Optimizar consulta BD

No varia mucho el tiempo de busqueda enter una forma u otra, depende directamente del servidor o el pc, a mayor capacidad mayor velocidad de consulta
  #5 (permalink)  
Antiguo 31/10/2012, 18:05
 
Fecha de Ingreso: abril-2004
Mensajes: 14
Antigüedad: 20 años
Puntos: 0
Respuesta: Optimizar consulta BD

Disculpa no entendí, si no varia entre paginacion y la consulta actual o paginacion y el rs desconectado.
En definitiva me recomedas utilizar cualquiera de estas opciones?
  #6 (permalink)  
Antiguo 31/10/2012, 20:03
 
Fecha de Ingreso: octubre-2012
Mensajes: 13
Antigüedad: 11 años, 6 meses
Puntos: 1
Respuesta: Optimizar consulta BD

A lo que me refiero, es que no varia mucho, yo he trabajo con bases de datos y aplicaciones puestas en redes compartidas con bastantes usuarios conectados; y fuese como fuese el modo de consulta siempre tardaba, hasta que la empresa cambio el servidor a uno de mayor potencia y todo se solucionó.
  #7 (permalink)  
Antiguo 31/10/2012, 22:19
 
Fecha de Ingreso: abril-2004
Mensajes: 14
Antigüedad: 20 años
Puntos: 0
Respuesta: Optimizar consulta BD

Ok, muchas gracias

Etiquetas: bd, sql
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 01:10.