Autor Tema: Optimizar conexión en MySQL  (Leído 5734 veces)

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

raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Optimizar conexión en MySQL
« en: Octubre 20, 2011, 09:03:36 pm »
Hooola!

Esta vez vengo a consultar :D

Hay alguna forma de optimizar una conexión en MySQL? Traigo una tabla de unos 1000 registros y Obtenerlos (desde un proc. almacenado) y rellenarlos en un ListView (comun, del OCX) me tarda aproximadamente unos 2 segundos cuando el MySQL Query Browser (del MySQL GUI Tools) tarda... 0.2 segundos en traer 5000 registros del mismo proc almacenado  ::)

Uso esta cadena de conexion
Código: [Seleccionar]
Provider=MSDataShape.1;DRIVER={MySQL ODBC 5.1 Driver};Server={IP};Port={port};Database={DB};User={USER};Password={PWD};default command timeout=20; Connection Timeout=5;
Y para obtener los datos

Código: (vb) [Seleccionar]
Call rs.Open(consulta, cnn, adOpenForwardOnly, adLockReadOnly) ' Consulta = "CALL spVerClientes();"

Y para rellenar los datos, el tipico While EOF x'D
Código: (vb) [Seleccionar]
Call rs.MoveFirst
While Not rs.EOF
    iItem = LV.ListItems.Add(, , rs.Fields(0)).Index
    With LV.ListItems(iItem)
        .SubItems(1) = rs.Fields(1)
        .SubItems(2) = rs.Fields(2)
        .SubItems(3) = rs.Fields(3)
        '....
    End With
    Call rs.MoveNext
Wend

Asi que pido su consejo, para optimizarlo, ya que la aplicación debe funcionar a travéz de Internet. Y tarda baanda, sin embargo el MySQL Query Browser ni se mosquea cuando es de internet  :-\

Algún consejo?

E N T E R

  • Petabyte
  • ******
  • Mensajes: 1062
  • Reputación: +57/-13
  • www.enterpy.com
    • Ver Perfil
    • www.enterpy.com
Re:Optimizar conexión en MySQL
« Respuesta #1 en: Octubre 20, 2011, 09:48:28 pm »
Yo con este método abro como 1000 Registros ni 1 segundo le lleva.

En un modulo.

Código: [Seleccionar]
Public cnADO As ADODB.Connection
Public rsADO As ADODB.Recordset

Public StrSQL As String
Public ComandoSQL As String

Public Sub ConectarADO()
   
    Set cnADO = New ADODB.Connection
    Set rsADO = New ADODB.Recordset
   
    rsADO.CursorLocation = adUseClient
    cnADO.ConnectionString = "Driver={MySQL ODBC 5.1 Driver};Server=localhost;Database=control_hotel; User=root;Password=root;Option=3;"
    cnADO.Open

End Sub

En un Form

Código: [Seleccionar]
Private Sub cmdConsultar_Click()
   
    '+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
    '// Conectar la Base Datos con ADO
        Call ConectarADO
    '+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
   
        ListView1.ListItems.Clear
        StrSQL = "SELECT * FROM piezas WHERE estado='LIBRE' and reserva='NO' ORDER BY numero"
        rsADO.Open StrSQL, cnADO, adOpenStatic, adLockOptimistic, adCmdText
       
        Do Until rsADO.EOF
       
            Set Lv = ListView1.ListItems.Add()
           
            With rsADO
                Lv.Text = .Fields("numero")
                Lv.SubItems(1) = strReplaceVer(.Fields("nombre") & "")
                Lv.SubItems(2) = Format(.Fields("precio"), "##,###0") & ""
                Lv.SubItems(3) = .Fields("estado")
                Lv.SubItems(4) = .Fields("reserva") & ""
                Lv.SubItems(5) = .Fields("cedula") & ""
                rsADO.MoveNext
            End With
           
        Loop
   
    '+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
    '// Cerrar la base de datos y liberar la memoria
        Call CerrarADO
    '+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+

End Sub

« última modificación: Octubre 20, 2011, 09:50:26 pm por E N T E R »
CIBER GOOGLE - CONCEPCIÓN PARAGUAY
www.enterpy.com
Primera regla de la programacion, para que vas a hacerlo complicado si lo puedes hacer sencillo

seba123neo

  • Terabyte
  • *****
  • Mensajes: 763
  • Reputación: +88/-5
    • Ver Perfil
Re:Optimizar conexión en MySQL
« Respuesta #2 en: Octubre 20, 2011, 11:38:47 pm »
yo siempre trabajo con bucles Do Until...Loop para recorrer el recordset, el MSHflexgrid siempre es mas rapido que un listview, aun mas rapido que el ucListView, en los listview te carga 100 mil items en un pestañeo, pero con un recordset es mucho mas lento. probaste en vez de un procedimiento almacenado.. hacer la consulta limpia ?

saludos.

raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Re:Optimizar conexión en MySQL
« Respuesta #3 en: Octubre 21, 2011, 07:19:14 pm »
E N T E R, usando esa cadena de conexion, no me funciona :(

seba, tarda lo mismo usando la consulta directa (son 3 Select con uniones :P)

seba123neo

  • Terabyte
  • *****
  • Mensajes: 763
  • Reputación: +88/-5
    • Ver Perfil
Re:Optimizar conexión en MySQL
« Respuesta #4 en: Octubre 21, 2011, 11:41:22 pm »
E N T E R, usando esa cadena de conexion, no me funciona :(

que raro porque la que te paso ENTER es la verdadera, yo la tengo igual en un proyecto y he visto que se usa asi.

pero espera... lo que tarda es el .Open ? o es el bucle de llenado del listview ?...proba cuanto demora la consulta sola (sin el llenado del listview) eso seria equivalente a lo que tarda el MySQL Query Browser mas o menos, paralo en esa linea y si la pasa rapido, es porque lo que tarda es el llenado.

saludos.

raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Re:Optimizar conexión en MySQL
« Respuesta #5 en: Octubre 22, 2011, 12:20:12 am »
que raro porque la que te paso ENTER es la verdadera, yo la tengo igual en un proyecto y he visto que se usa asi.
Si, es raro, medio mundo lo esta usando asi y a mi me tira error de conexion.
pero espera... lo que tarda es el .Open ? o es el bucle de llenado del listview ?...proba cuanto demora la consulta sola (sin el llenado del listview) eso seria equivalente a lo que tarda el MySQL Query Browser mas o menos, paralo en esa linea y si la pasa rapido, es porque lo que tarda es el llenado.
Lo que tarda es el llenado, lo voy a probar