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.
