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.
