SQL - Múltiples consultas a las mismas tablas en un mismo SP. Una de ellas tiene 11M de registros.

 
Vista:
sin imagen de perfil
Val: 2
Ha disminuido su posición en 34 puestos en SQL (en relación al último mes)
Gráfica de SQL

Múltiples consultas a las mismas tablas en un mismo SP. Una de ellas tiene 11M de registros.

Publicado por Leandro (2 intervenciones) el 11/01/2019 02:00:05
Buen día a todos,

Espero me puedan ayudar, se los agradezco de antemano.

Tengo un stored procedure que inserta datos en una tabla X, estos datos son producto de la unión (UNION) de 14 consultas (SELECT ... FROM ... WHERE ...). El problema está en que cada una de estás consultas hace left joins a más de 10 tablas, las cuales son casi las mismas en las 14 consultas y de las cuales algunas de ellas cuentan con más de 11 y 7 millones de registros.

Lo que he pensado es hacer una consulta inicial con la máxima cantidad de coincidencias y tablas que tengan en común estas 14 consultas, y esta insertarla en una tabla temporal #TEMP para luego en las 14 consultas aplicarle las tablas y condiciones (WHERE ...) que les falten. De esta forma cargaría un universo inicial, para que luego las 14 consultas no choquen directamente a las tablas involucradas repetidas veces, que por cierto, algunas de ellas son tablas transaccionales. Este impacto causa bloqueos a la base de datos y es el problema que se me ha pedido resolver o al menos mejorar.

El problema que se me presenta es que realizar lo que he pensado me va a tomar mucho tiempo, por lo que el SP es muy extenso, y no estoy seguro si realmente mejore. Lo que les pregunto es si, en general, lo que estoy proponiendo podría dar buenos resultados. Pregunto esto porque cuando se hacen las 14 consultas actualmente, cada una de ellas cuenta con muchas restricciones en la clausula WHERE, por lo que cada una de ellas (14) es mucho más rápido en tiempo de ejecución que el universo que propongo haciéndole un SELECT * (cabe resaltar que la primera tabla en el FROM a la que se le hace los LEFT JOIN, es la que tiene los más de 11 millones de registros).

Mi pregunta es si están de acuerdo con mi propuesta, o si tienen algo más que añadir. En caso esten más interesados en el caso por favor coméntenmelo y les adjunto el archivo con el SP para que lo revisen.

PD: Ya analicé los índices y las estadísticas. Todos los joins tienen WITH (NOLOCK).

Saludos!
LCortez
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Múltiples consultas a las mismas tablas en un mismo SP. Una de ellas tiene 11M de registros.

Publicado por Isaias (1921 intervenciones) el 14/01/2019 17:34:43
¿En que motor de base de datos?, ¿SQL Server?, ¿Que EDICIÓN - VERSIÓN maneja?, si fuera un proceso BATCH, porque no voltea a ver a SSIS
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar