Hola

has probado con a definir un EVI (Encoded vector Index)

Hay buenos artículos
https://www.ibm.com/developerworks/ibmi/library/i-evi-only-access-in-ibm-db2-for-i/index.html



https://www.mail-archive.com/[email protected]/msg06908.html


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.
____________________________________________________
�nete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd )
Forum.Help400 � Publicaciones Help400, S.L.

Reply via email to