El 02/04/2020 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:
WITHRESUMEN_TABLA1AS (SELECT * FROM TABLA1 WHERE campo BETWEEN <valor_inicial> AND <valor_final>),RESUMEN_TABLA2AS (SELECT * FROM TABLA2 WHERE campo BETWEEN <valor_inicial> AND <valor_final>)SELECT*FROM
TABLALEFT JOIN
RESUMEN_TABLA1 ON clave1 = claveLEFT JOINRESUMEN_TABLA2 ON clave2 = clave;
En la consulta de la vista
SELECT*FROMVISTAWHERE<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.
Kordinazio Teknikoko Burua
Jefe del Área de Coordinación Técnica
Informazioaren Teknologien Saila
Departamento de Tecnologías de la I nformación
Tel: 945161614 | Fax 945161600
[email protected] | www.vitoria-gasteiz.org
KONFIDENTZIALTASUNA
Komunikazio honen edukia eta honi erantsitako dokumentazio osoarena konfidentziala da eta adierazitako jasotzaileari beste inori ez dagokio.
Zeu jasotzaile ez bazina, jakinaraz iezaguzu, mesedez, eta eskatu nahi dizugu edukiaren berri inori ez esan eta mezua ezaba dezazula.
CONFIDENCIALIDAD
El contenido de esta comunicación, así como el de toda la
documentación anexa, es confidencial y va dirigido
únicamente al destinatario del mismo.
En el supuesto de que usted no fuera el destinatario, le solicitamos
que nos lo in
dique y no comunique su contenido a terceros, procediendo
a su destrucción.
CONFIDENCIALITY
The content of this communication and any attached information is confidential and exclusively for the use of the addressee.
If you are not the addressee, we ask you to notify to the sender and do not pass its content to another person, and please be sure you destroy it.
____________________________________________________ �nete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd ) Forum.Help400 � Publicaciones Help400, S.L.
