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.
