Hola Jesús,

He de reconocer que nunca he tenido el tiempo suficiente para ponerme al
día en temas como asesor de índices o de rendimiento de la BBDD, a parte de
que se ma hace cuesta arriba.

Gracias por tus comentarios.

El vie., 3 abr. 2020 9:44, Jesus Maria Arzak (DHL ES) <
[email protected]> escribió:

> Buen Dia
>
>
>
> Una cosa muy importante que has de tener en cuenta a la hora de utilizar
> el Sql es que cuando utilices un índice tengas en el Where los campos del
> índice, no hace falta que tengas todos  pero los que estén sean del índice.
>
>
>
> Además es muy muy importante que los pongas ordenados según el orden del
> índice.
>
>
>
> En el momento que aparecen desordenados o tienes un campo de selección que
> no está en el índice el rendimiento baja espectacularmente.
>
>
>
> Quizá ya lo sepas pero no lo he visto mencionado .
>
>
>
> Un saludo
>
>
>
>
>
> *Jesús Mª Arzak Capilla*
>
> Solutions Management
>
> *DHL Parcel Iberia, S.L.U.*
>
> Paseo Mikeletegi, nº 65
> Parque Tecnológico de San Sebastián
> E-20009 San Sebastián
>
> Phone: +34 943 37 81 37
>
>
> * [email protected] <%[email protected]>*
>
> www.dhlparcel.es
>
> *GO**GREEN – Environmental protection with DHL*
> *Por favor, ten en cuenta el medio ambiente antes de imprimir este correo*
>
>
>
>
>
>
>
> *From:* Forum.help400 [mailto:[email protected]] *On
> Behalf Of *Juan Carlos Paredes
> *Sent:* jueves, 2 de abril de 2020 21:55
> *To:* forum.help400 <[email protected]>
> *Subject:* Re: Cómo optimizar la consulta a una vista SQL
>
>
>
> 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.
>
> CONFIDENTIALITY NOTICE: This message is from DHL and may contain
> confidential business information. It is intended solely for the use of the
> individual to whom it is addressed. If you are not the intended recipient
> please contact the sender and delete this message and any attachment from
> your system. Unauthorized publication, use, dissemination, forwarding,
> printing or copying of this E-Mail and its attachments is strictly
> prohibited.
> ____________________________________________________
> Ú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