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 ​

En 2 abr. 2020 21:47, 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.

Reply via email to