Hola a tod@s,

desde que planteé mis dudas sobre este tema he realizado algunas pruebas
con vuestros consejos.

Las variables globales funcionan bastante bien, pero si quiero utilizar la
vista en un query no es posible si no se establecen fuera de éste.

La UDTF también funciona, pero tampoco se puede utilizar directamente en
querys.

¿Por qué querys? Porque tengo usuarios que saben manejarlos muy bien y es
una herramienta válida para ellos.

Dándole vueltas al asunto, he descubierto una cuestión que implica la
lectura de todo el fichero. Mis tablas de bases de datos son muy antiguas
(año 1994) y las fechas se guardan en formato numérico. La vista estaba
transformando este campo numérico en fecha con la función
TIMESTAMP_FORMAT(). A continuación se seleccionaba por esa fecha
recalculada.

Estoy casi seguro que el motor DB2 está recalculando las fechas de todos
los registros y luego está seleccionando. Sin embargo, si la selección la
hago por el campo numérico, el  resultado se obtiene mucho más rápido.
Incluso asumible por el usuario.

La idea de convertir las fechas (u otros campos) es dejar la información
preparada para ser tratada directamente por el query, consulta ODBC,
generación de informes, etc. Lo que estoy haciendo ahora es incluir también
los campos originales, para poder hacer los filtros correspondientes.

Gracias a todos por vuestras sugerencias.

Javier Mora

El jue., 2 abr. 2020 a las 16:08, datil400 (<[email protected]>) escribió:

> Hola a tod@s,
>
> no he sabido expresar de mejor manera la consulta que quiero haceros.
>
> Espero que todos vosotros, vuestros familiares y conocidos estéis bien y
> viviendo el confinamiento de la mejor manera posible.
>
> Tengo una vista que resume información de varios archivos que contienen
> millones de registros, no hable de uno o dos millones, hablo de 200
> millones. Por muchos índices y consejos del asesor de índices no consigo
> que se ejecute en un tiempo razonable.
>
> Antes de crear un archivo de acumulados o una tabla materializada que me
> mantenga siempre calculados los datos quiero probar otras alternativas (si
> las hay).
>
> En esos 200 millones de registros sólo quiero tratar un grupo reducido,
> por ejemplo el último mes o el último año. Aunque en el select sobre la
> vista siempre selecciono el rango que quiero, realmente lo estoy haciendo
> sobre el resultado de los cálculos que hace la vista, que siempre los hace
> sobre el total de los registros de las tablas.
>
> Además, son cálculos que se hacer por partes dentro de la cláusula WITH.
>
> Lo que intento es que la vista sólo seleccione el grupo de registros de
> cada una de las tablas. Un pequeño ejemplo:
>
> WITH
>   RESUMEN_TABLA1
> AS (
>   SELECT * FROM TABLA1 WHERE campo BETWEEN <valor_inicial> AND
> <valor_final>
> ),
>   RESUMEN_TABLA2
> AS (
>   SELECT * FROM TABLA2 WHERE campo BETWEEN <valor_inicial> AND
> <valor_final>
> )
> SELECT
>   *
> FROM
>   TABLA
> LEFT JOIN
>   RESUMEN_TABLA1 ON clave1 = clave
> LEFT JOIN
>   RESUMEN_TABLA2 ON clave2 = clave
> ;
>
> En la consulta de la vista
>
> SELECT
>   *
> FROM
>   VISTA
> WHERE
>   <valor_inicial> = '2020-01-01' AND <valor_final> = '2020-03-31'
>
> Realmente esto no se puede hacer en SQL pero simularlo. Se me ocurren
> algunas soluciones:
>
> 1. Variables globales
>
> Cargar los valores de selección en variables globales que utilice la vista
> internamente. Inconveniente, dos trabajos o usuarios distintos no podrían
> hacer una consulta concurrente.
>
> 2. Procedimiento almacenado o UDTF
>
> Utilizar el paso de parámetros para seleccionar las filas de los
> subselects, pero no sé cómo incoporarlas en una vista para que el usuario
> pueda utilizar un Query, ODBC, etc. sin tener que utilizar el procedimiento
> o UDTF.
>
> No sé si he sido capaz de explicarme (creo que no), pero ¿alguno vosotros
> me puede dar alguna pista de cómo podria hacer lo que propongo?
>
> O simplemente estoy alucinando y es imposible hacerlo.
>
> Saludos a todos y gracias por vuestros comentarios.
>
> Javier
>
____________________________________________________
�nete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd )
Forum.Help400 � Publicaciones Help400, S.L.

Reply via email to