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?
pongo mas RAM y CPU
ResponderBorrarmejorar la performance, mejora...
Ufa... ¿no hay +1 al comentario?
ResponderBorrarAlejandro: no te olvides de los IO, eso puede pesar más que agregar RAM y CPU.
ResponderBorrarIndependiente de ello, un indice por clave+fecha no ayuda?
&TotPag = Grid.PageCount
ResponderBorrarif &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
Gracias a todos por los comentarios.
ResponderBorrarAlejandro:
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.
Muy buenas respuestas, siempre aprendo algo con estos "pienso pienso" de Enrique.
ResponderBorrarUn saludo.
Bueno, yo haría índices y un combo con orders (si tiene millones de registros, eso ayuda mucho).
ResponderBorrarOtro 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!