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.

Reply via email to