⁣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.

Reply via email to