Si el valor inicial y final son el mismo en ambas tablas, yo crearía un índice por ese campo en ambas tablas y otro por la clave de la join.
Y luego Select * from tabla1 join tabla2 on clave1 = clave2 where valor between valor_inicial and valor_final. Espero que ayude. Salud y paciencia #yomequedoencasa Juan Carlos. En 2 abr. 2020 20:57, en 20:57, datil400 <[email protected]> escribió: >El tema de los índices está más que revisado, no mejoran el >rendimiento. > >Los subselects siempre revisan todos los registros. ¿Cómo lo sé? Una >consulta de un tramo pequeño está tardando entrr 30 y 45 minutos. Si >incorporo en los subselects el mismo filtro, tarda segundos. > >Me toca aprender cómo se puede transformar un procedimiento almacenado >en >una vista. Si fuera posible, ¡claro! > >Gracias por tu aportación. > >El jue., 2 abr. 2020 18:31, Nicolas Silva <[email protected]> escribió: > >> Hola Javier: >> >> Yo me inclinaria para un Stored Procedure debido a que en tu >seleccion >> tienes parametros, en este caso fechas, y no puedes dejarlos >predispuestos >> en la vista. >> Tambien, intentaria agregar un indice tipo EVI sobre las tablas para >mejor >> seleccion de las fechas. >> >> Si el asesor de indices no te lo indica, puedes ejecutar el visual >explain >> para ver mejor los indices a crear. >> >> Espero puedas resolverlo. >> >> Saludos !!!! >> >> >> El jue., 2 abr. 2020 a las 11: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.
____________________________________________________ �nete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd ) Forum.Help400 � Publicaciones Help400, S.L.
