Los subselects son difíciles de eliminar porque calculan datos resumen de varias tablas y el select final las une todas.
Voy a explorar el explain, aunque no lo entiendo demasiado. Saludos y gracias El jue., 2 abr. 2020 21:54, Juan Carlos Paredes <[email protected]> escribió: > Por eso te digo que evites las subselect. Trata de filtrar en la select > final. > > Mira a ver qué te dice el Visual Explain. > Otra opción es que arranques un monitor de rendimiento sobre el trabajo y > revises las anotaciones. Una de las tareas más pesadas el la apertura y > cierre de ODPs. > > Revisa qué está haciendo el motor de DB2 con eso. > > Obtener BlueMail para Android <http://www.bluemail.me/r?b=15824> > En 2 abr. 2020, en 21:47, datil400 <[email protected]> escribió: >> >> Los índices ya están creados, incluso aquellos que aconseja el asesor. >> >> Desde mi punto de vista, son tantos los registros que hay que resumir en >> cada subselect (todos?), que es lo que provoca la falta de rendimiento. >> >> Gracias Juan Carlos >> >> El jue., 2 abr. 2020 21:21, Juan Carlos Paredes <[email protected]> >> escribió: >> >>> >>> 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, 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. >> >> ------------------------------ >> >> �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.
