PiensoPienso: Diseño de grillas con Descripción.
Tengo las tablas
Tengo 2 Webpanels que muestran una grilla que tiene 20 renglones y deben mostrarse registros de la tabla de Movimientos. y se deben mostrar las mismas columnas en ambos webpanels
ClaveAutonumber
Opcion 1)
La grilla tiene el atributo ReferenciaDescripcion en la grilla
En este ejemplo un poco exagerado (no mucho!) se recarga tanto el servidor de base de datos, como la red y también el cliente (navegador).
Table Movimientos (100.000 registros) |
|
Table Referencia (10.000 registros) |
|
Tengo 2 Webpanels que muestran una grilla que tiene 20 renglones y deben mostrarse registros de la tabla de Movimientos. y se deben mostrar las mismas columnas en ambos webpanels
ClaveAutonumber
ClaveDescripcion
Fecha
ReferenciaDescripcion (de la tabla Referencia)
Se tiene 2 implementaciones:
Fecha
ReferenciaDescripcion (de la tabla Referencia)
Se tiene 2 implementaciones:
Opcion 1)
La grilla tiene el atributo ReferenciaDescripcion en la grilla
Opcion 2)
Se pone el atributo Referencia con un dynamic combo box con
para mostrar la descripción.
Cual de los dos tiene mejor performance?. Justifique su respuesta.
Considerar accesos a la base de datos, html generado, trafico en la red, tiempo de respuesta.
RESPUESTA:
Acceso a la base de datos.
Opción 1) Hace un join entre las dos tablas y trae los resultados.
Opción 1) Hace un join entre las dos tablas y trae los resultados.
Opción 2) Hacer un select de los registros que va a mostrar en la tabla, y para cada uno de ellos recorre un curso y trae todos los registros de la tabla Referencia.
HTML Generado.
Opción 1) Genera un renglón en la grilla por cada registro del JOIN. (Tamaño del html 3.6 KB)
Opcion 2) Genera un renglón en la grilla, y ademas pone los 10000 valores por cada uno de los registros de la grilla. Tamaño del HTML 698 KB)
Tiempo de Respuesta.
Opcion 1) 0.485 segundos.
Opcion 2) 4.83 segundos (la enorme mayoría del tiempo, parseando el html).
Esta prueba es local, hacerlo a traves de la red, es mucho mas acentuada la diferencia, por la diferencia entre transferir 3K y 700K.
Resumiendo.
Suponiendo que se tienen 20 registros en la grilla
Opcion 1 Opcion 2
Base de datos (Sentencias) 1 21 (21 veces peor)
HTML (KB) 3.6 698 (200 veces peor)
Tiempo Respuesta (seg) 0.48 4.83 (10 veces peor)
Hay que tener cuidado cuando ponemos un atributo/variable con un combo box en una grilla. El resultado visible puede ser el mismo pero en performance, aunque las tablas no tengan muchos registros, pueden ser enormes.
En este ejemplo un poco exagerado (no mucho!) se recarga tanto el servidor de base de datos, como la red y también el cliente (navegador).
Tal cual nos paso y tuvimos que sacar los combo box ya que la aplicación se arrastraba. Pero tu explicación es tal cual nos paso.
ResponderBorrarA todos nos ha pasado !
ResponderBorrarEstoy agregando un listado en KBdoctor, para encontrar estos casos, pues es bastante difícil de detectarlo.
Es común tener el campo clave de las tablas como dynamic combobox, y luego heredarlo en varios programas.