Autor Tema: Mi Sistema tiene una transmisión de datos muy lento con MYSQL y con ACCESS  (Leído 7319 veces)

0 Usuarios y 1 Visitante están viendo este tema.

wolf_kof

  • Visitante
Tengo un gran problema y pido de su sabiduria para poder solucionarlo, no se como le aran ustedes para abrir una tabla. Yo lo hago de la siguiente manera.

Esto va en un módulo en el Sub Main

Código: (vb) [Seleccionar]
Data.Open "Driver={MySQL ODBC 5.1 Driver};Server=" & servidor & ";Port=3306;Database=BestSolution;User=usuario; Password=pass;Option=3"

Para Abrir una Tabla de Amortizaciones por ejemplo utilizo esto en el Load Form del Formulario

Código: (vb) [Seleccionar]
cuotas.Open "select * from amortizacion order by cant desc", Data, adOpenDynamic, adLockOptimistic

El Problema consiste en lo siguiente: tengo la base de datos con 25,000 datos en MySQL y se vuelve Extremadamente Lenta!! no creo que sea la base de datos, tiene que ser alguna forma de como abrir la base de datos por que no puedo hacer que sea mas rapido...... Espero sus respuestas y de antemano muchas gracias.

fx700

  • Kilobyte
  • **
  • Mensajes: 95
  • Reputación: +4/-2
    • Ver Perfil
Re:Mi Sistema tiene una transmisión de datos muy lento con MYSQL y con ACCESS
« Respuesta #1 en: Febrero 20, 2011, 01:58:01 pm »
No recuerdo donde pero leí que colocar el asterisco hace lenta una consulta ya que tiene que comprobar el tipo de dato de cada campo o algo por estilo y se recomedaba colocar todos los campo lo cual supuestamente mejora el rendimiento, ahora si tu tabla tiene 20 o 30 campos colocarlo 1 a 1 seria molesto pero quizas mejore el rendimiento puedes probar con un timer o algo asi y ver si efectivamente te mejora el rendimiento.

Cheka estos link's
http://www.baluart.net/articulo/top-10-errores-mysql-cometidos-por-desarrolladores-php
http://www.baluart.net/articulo/10-tips-para-optimizar-consultas-mysql

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Mi Sistema tiene una transmisión de datos muy lento con MYSQL y con ACCESS
« Respuesta #2 en: Febrero 20, 2011, 02:20:48 pm »
Wolf, en el titulo de tu post mencionas a Access pero el comentario que haces es sobre MYSQL.

De MySQL no se nada.
Si fuera de Access te diría que urgente hagas a tu BD un "compactado y reparado", puede que la tabla este corrupta o por corromperse.
En las ultimas versiones de Access no encuentro esa opcion, asi que en todo caso usa el JetComp.exe

También es correcto no usar el * si es que tienes muchos campos. Mencionar las tablas es lo mas apropiada pq le quitar un poco de chamba al motor. Aunque 25,000 registros incluso para access es poco no deberia demorar incluso con el *, pero es conveniente cambiar la practica de construir el Select.


« última modificación: Febrero 20, 2011, 09:34:55 pm por YvanB »
Me encuentras en YAcosta.com

ssccaann43

  • Moderador
  • Terabyte
  • *****
  • Mensajes: 970
  • Reputación: +97/-58
    • Ver Perfil
    • Sistemas Nuñez, Consultores y Soporte, C.A.
Re:Mi Sistema tiene una transmisión de datos muy lento con MYSQL y con ACCESS
« Respuesta #3 en: Febrero 21, 2011, 10:59:58 am »
Buenas...!

Usar consultas con el * retarda la respuesta del gestor de BD. Por que? Porque debe comprobar cada campo, verificar el tipo de campo y posteriormente ver si tiene registros...! Por tal motivo fx700 acierta en que debes colocar campo por campo y solo aquellos necesarios que deseas mostrar...! Por otro lado, 25mil registros me parece poco, no debería tardar. Te comente que el listview lo que hace practicamente es repintar, es decir ese control no contiene un conector de BD donde podamos pasarle parametros, simplemente nosotros ejecutamos una consulta y mostramos o repintamos los registros allí...! Totalmente diferente a que si usamos un DataGrid o un MSHFlexGrid...! Sin embargo me quedo con mi ListView...!

Muestranos como estas realizando la carga de los registros en tu ListView...!
Miguel Núñez.

wolf_kof

  • Visitante
Re:Mi Sistema tiene una transmisión de datos muy lento con MYSQL y con ACCESS
« Respuesta #4 en: Febrero 21, 2011, 01:25:46 pm »
Ok Muchas gracias a todos, si pondre en practica
No recuerdo donde pero leí que colocar el asterisco hace lenta una consulta ya que tiene que comprobar el tipo de dato de cada campo o algo por estilo y se recomedaba colocar todos los campo lo cual supuestamente mejora el rendimiento, ahora si tu tabla tiene 20 o 30 campos colocarlo 1 a 1 seria molesto pero quizas mejore el rendimiento puedes probar con un timer o algo asi y ver si efectivamente te mejora el rendimiento.

Cheka estos link's
http://www.baluart.net/articulo/top-10-errores-mysql-cometidos-por-desarrolladores-php
http://www.baluart.net/articulo/10-tips-para-optimizar-consultas-mysql

Yo utilizo un Sub para llenar el listview y despues lo llamo, osea filtro el recordset y despues lo llamo.

Código: (vb) [Seleccionar]

Sub rrellenarcuotas()
On Error Resume Next
cuotas.Requery -1
ListView1.ColumnHeaders.Clear
ListView1.ListItems.Clear
l4.Caption = "0.00"
l5.Caption = "0.00"
l6.Caption = "0.00"
l7.Caption = "0.00"
l8.Caption = "0.00"
ListView1.ColumnHeaders.Add 1, , "No.", 500
ListView1.ColumnHeaders(1).Resizable = False
ListView1.ColumnHeaders(1).Alignment = xtpListViewColumnCenter
ListView1.ColumnHeaders.Add 2, , "Fecha a Pagar", 1500
ListView1.ColumnHeaders(2).Resizable = False
ListView1.ColumnHeaders(2).Alignment = xtpListViewColumnCenter
ListView1.ColumnHeaders.Add 3, , "Cuota", 1100
ListView1.ColumnHeaders(3).Resizable = False
ListView1.ColumnHeaders(3).Alignment = xtpListViewColumnRight
ListView1.ColumnHeaders.Add 4, , "Interes", 1000
ListView1.ColumnHeaders(4).Resizable = False
ListView1.ColumnHeaders(4).Alignment = xtpListViewColumnRight
ListView1.ColumnHeaders.Add 5, , "Mora", 1100
ListView1.ColumnHeaders(5).Resizable = False
ListView1.ColumnHeaders(5).Alignment = xtpListViewColumnRight
ListView1.ColumnHeaders.Add 6, , "Pago", 1100
ListView1.ColumnHeaders(6).Resizable = False
ListView1.ColumnHeaders(6).Alignment = xtpListViewColumnRight
ListView1.ColumnHeaders.Add 7, , "Saldo", 1100
ListView1.ColumnHeaders(7).Resizable = False
ListView1.ColumnHeaders(7).Alignment = xtpListViewColumnRight
ListView1.ColumnHeaders.Add 8, , "Estado", 2100
ListView1.ColumnHeaders(8).Resizable = False
ListView1.ColumnHeaders.Add 9, , "Fecha de Pago", 1500
ListView1.ColumnHeaders(9).Resizable = False
ListView1.ColumnHeaders(9).Alignment = xtpListViewColumnCenter
ListView1.ColumnHeaders.Add 10, , "Atraso", 975
ListView1.ColumnHeaders(10).Resizable = False
ListView1.ColumnHeaders(10).Alignment = xtpListViewColumnCenter
   
    Do Until cuotas.EOF
        ListView1.ListItems.Add 1, , cuotas!cant
        ListView1.ListItems(1).ListSubItems.Add 1, , cuotas!fecha
        ListView1.ListItems(1).ListSubItems.Add 2, , Format(cuotas!cuota, "0.00")
        ListView1.ListItems(1).ListSubItems.Add 3, , Format(cuotas!interes, "0.00")
        l4.Caption = Val(l4.Caption) + Val(cuotas!interes)
        ListView1.ListItems(1).ListSubItems.Add 4, , Format(cuotas!mora, "0.00")
        l6.Caption = Val(l6.Caption) + Val(cuotas!mora)
        ListView1.ListItems(1).ListSubItems.Add 5, , Format(cuotas!pago, "0.00")
        ListView1.ListItems(1).ListSubItems.Add 6, , Format(cuotas!ssaldo, "0.00")
        l8.Caption = Val(l8.Caption) + Format(cuotas!ssaldo, "0.00")
        ListView1.ListItems(1).ListSubItems.Add 7, , cuotas!estado
        ListView1.ListItems(1).ListSubItems.Add 8, , cuotas!fechap
        ListView1.ListItems(1).ListSubItems.Add 9, , cuotas!atraso
         
        If cuotas!estado = "PAGADO" Then
        l7.Caption = Val(l7.Caption) + Val(cuotas!pago)
        End If
        l5.Caption = Val(l5.Caption) + (Val(cuotas!cuota) + Val(cuotas!interes) + Val(cuotas!mora))
        l5.Caption = Format(l5.Caption, "0.00")
       
        If (cuotas!atraso > 0) Then
            ListView1.ListItems(1).ForeColor = vbRed
            ListView1.ListItems(1).ListSubItems(1).ForeColor = vbRed
            ListView1.ListItems(1).ListSubItems(2).ForeColor = vbRed
            ListView1.ListItems(1).ListSubItems(3).ForeColor = vbRed
            ListView1.ListItems(1).ListSubItems(4).ForeColor = vbRed
            ListView1.ListItems(1).ListSubItems(5).ForeColor = vbRed
            ListView1.ListItems(1).ListSubItems(6).ForeColor = vbRed
            ListView1.ListItems(1).ListSubItems(7).ForeColor = vbRed
            ListView1.ListItems(1).Bold = True
            ListView1.ListItems(1).ListSubItems(1).Bold = True
            ListView1.ListItems(1).ListSubItems(2).Bold = True
            ListView1.ListItems(1).ListSubItems(3).Bold = True
            ListView1.ListItems(1).ListSubItems(4).Bold = True
            ListView1.ListItems(1).ListSubItems(5).Bold = True
            ListView1.ListItems(1).ListSubItems(6).Bold = True
            ListView1.ListItems(1).ListSubItems(7).Bold = True
        End If
        cuotas.MoveNext
    Loop
   
l4.Caption = Format(l4.Caption, "0.00")
l5.Caption = Val(l2.Caption) - Val(l3.Caption)
l5.Caption = Format(l5.Caption, "0.00")
l6.Caption = Format(l6.Caption, "0.00")
l7.Caption = Format(l7.Caption, "0.00")
l8.Caption = Format(l8.Caption, "0.00")
End Sub

Ese es el codigo y este es el formulario....

ssccaann43

  • Moderador
  • Terabyte
  • *****
  • Mensajes: 970
  • Reputación: +97/-58
    • Ver Perfil
    • Sistemas Nuñez, Consultores y Soporte, C.A.
Re:Mi Sistema tiene una transmisión de datos muy lento con MYSQL y con ACCESS
« Respuesta #5 en: Febrero 21, 2011, 07:15:18 pm »
Abner, estas aplicando muchos calculos para llenar el listview, eso hace que se retarde el vaciado de datos al objeto...!
Miguel Núñez.

wolf_kof

  • Visitante
Re:Mi Sistema tiene una transmisión de datos muy lento con MYSQL y con ACCESS
« Respuesta #6 en: Febrero 24, 2011, 01:27:42 pm »
Ya encontre el problema  ;D ;D ;D ;D estaba metiendo todos los datos sin filtrar, y asi si es lento... puse un filtro y agrege un par de carateres y con eso basto para que sea rapido!!! la verdad es que el problema solo era en este formulario.

SSCCAANN grax por tu apoyo pero con el filtro los calculos los hace muy bien el sistema.