Gracias Alex.

Voy a estudiarme el artículo, a ver si saco alguna conclusíon que me ayude
a resolver el problema de rendimiento.


El vie., 3 abr. 2020 a las 8:50, Alex Martínez (<[email protected]>)
escribió:

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

Reply via email to