PiensoPienso: Como mejorar la permformance de este programa?

Tengo una tabla con millones de registros que son de la forma

*Clave
Descripcion
Fecha

y un webpanel  con una grilla que muestra los registros que cumplen la condicion:

Clave = &Clave when not &Clave.isEmpty();
Descripcion like &Descripcion when not &Clave.IsEmpty();
&FechaInicial <= Fecha and Fecha <= &FechaFinal ;


En la pantalla se muestran la cantidad de registros que tiene le grilla y en los eventos tengo:

&TotPag = Grid.PageCount
if Grid.Rows > 0
if Grid.PageCount <= 1
Paginado.Visible = 0 //Muestro botones de  paginado
else
if &nroPag = 1
anterior.Enabled = 0
primero.Enabled = 0
endif
if &nroPag = Grid.PageCount
siguiente.Enabled = 0
endif
endif
else
Paginado.Visible = 0
endif

Como mejorarían la performance de este programa? 

Comentarios

  1. pongo mas RAM y CPU

    mejorar la performance, mejora...

    ResponderBorrar
  2. Alejandro: no te olvides de los IO, eso puede pesar más que agregar RAM y CPU.

    Independiente de ello, un indice por clave+fecha no ayuda?

    ResponderBorrar
  3. &TotPag = Grid.PageCount
    if &TotPag <= 1
    Paginado.Visible = 0 //Muestro botones de paginado
    else
    if &nroPag = 1
    anterior.Enabled = 0
    primero.Enabled = 0
    endif
    if &nroPag = &TotPag
    siguiente.Enabled = 0
    endif
    endif

    Antigamente cada Grid.PageCount dispara um select count no banco

    ResponderBorrar
  4. Gracias a todos por los comentarios.

    Alejandro:
    Impecable la respuesta. Con mas RAM y CPU es seguro que se logra mejorar la performance de la sentencia.

    Phd:
    Tu respuesta es correcta. Cada Grid.PageCount, necesita hacer un Select Count(*) con las condiciones del filtro, por lo que en nuestro caso, solo con asignar el Grid.PageCount a una variable, y luego utilizarla siempre, va a realizar dos sentencias (que eventualmente puede ser pesadas) para contar la cantidad de registros de la grilla.

    Hay muchas otras cosas a tener en cuenta para optimizar sentencias (indices, estadisticas, fragmentacion, limitar cantidad de registros devueltos, etc) pero con la letra del problema, la optimizacion menos costosa, es la de no abusar dle Grid.PageCount.

    Enrique.

    ResponderBorrar
  5. Muy buenas respuestas, siempre aprendo algo con estos "pienso pienso" de Enrique.

    Un saludo.

    ResponderBorrar
  6. Bueno, yo haría índices y un combo con orders (si tiene millones de registros, eso ayuda mucho).
    Otro factor son las condiciones (creo que debería ser >= en &FechaInicial), puntualmente analizaría si realmente es necesaria la funcionalidad del LIKE, si alcanza con buscar por >= es mucho más eficiente si se tiene la tabla indexada.
    Los que siempre me pregunto es ¿aquí sobre qué indice hace el select?
    Muy interesantes los post, como siempre!

    ResponderBorrar

Publicar un comentario

1) Lee el post
2) Poné tu opinión sobre el mismo.
Todos los comentarios serán leidos y la mayoría son publicados.

Entradas más populares de este blog

La nefasta influencia del golero de Cacho Bochinche en el fútbol uruguayo

Aplicación monolítica o distribuida?

Funcionalidades de GeneXus que vale la pena conocer: DATE Constants.