Compañeros, No se si ya existirá una mejora disponible para el tiempo de los smarthlist cuando se encuentran demasiados datos almacenados, pero me toco el caso que en el modulo de ingresos eventuales se tardaba demasiado en consultar la información y esto daba un timeout, consulte el smarthlist de otros ingresos y este en su consulta hace un filtro de permisos por empleo, (permiso_empleo_tabla) y este lo envia a otro llamado permiso_tipo_planilla_tabla y el filtro lo realiza de la siguiente manera: where exists (select null from sco.permiso_tipo_planilla_tabla(@usuario) where emp_codtpl = codtpl) Donde se determino que en este es donde se lleva mas tiempo la consulta ya que busca a todos los empleados con el usuario que se envia, luego realiza el filtro (where emp_codtpl = codtpl) por cada empleado, la solución fue modificar este proceso para que recibiera el codtpl y realizara el filtro dentro del script y esto mejoro bastante el tiempo y ya no da timeout. Esta fue la función que se modifico: (tabla)
Cabe mencionar que mando a llamar la funcion permiso_empleo_tabla que a su vez llama a esta función. |
Si vos NO queres utilizar la función que retorna tabla, podes utilizar la función que retornar un valor 1 o 0, La función que retorna tabla es mucho más rápida que la función que retorna 1 o 0, porque la evalúa una vez nada mas y no una vez por cada registro de la tabla. Esto lo podes comprobar utilizando el Execution Plan para el query en SQL Management Studio. En el plan de ejecución evalúa primero la función y luego aplica la función exists 'n' veces por cada registro del query. Si se agrega como parámetro el Entonces, más bien depende de la configuración de los datos, lo positivo o negativo de lo que hiciste. Sin embargo, siempre sería mejor que cambiaras la función a la que retorna 1 o 0 y no cambiaras la función ya existente, porque corres el riesgo que se necesite modificar el uso de la función en otros smartlists, listas de valores, procedimientos, reportes y habría que revisar si no lo usa el código fuente de Evolution |
Los smartlist de ingresos y descuentos eventuales son los que mas suelen crecer. En mi caso lo que hago es quitar el cheque de "peticion automatica de datos" para que el smartlist cargue en blanco y tambien configurar el querybuilder porque así la consulta se hace con los filtros del querybuilder y la información cargará rápidamente Otra sugerencia también sería actualizar a la versión 1.9.1 ya que el nuevo componente para mostrar los smartlist es mucho mas rápido que la interfaz con silverlight |
¿Podrías agregar los cambios realizados a nivel de funciones y configuración de SmartList para evaluar más a detalle lo que estás sugiriendo?
Muchas gracias por la respuesta, no tenia conocimiento de la funcion permiso_tipo_planilla que ya llevaba como parámetros el usuario y el codtpl, y eso fue lo que hice en esta funcion (tabla) agregar este otro parámetro, ya que el evolution del cliente tenia esta validación en su smarthlist.
Agregue el procedimiento que se modifico en la pregunta principal.