SQL 200: Codigo eficiente - Optimizacion

23/03/2008 - 12:38 por Juan Carlos Mendoza | Informe spam
Buenas:

Estoy revisando codificacion de los programadores del area de
desarrollo a fin de sugerir cambios para optimizar los queries.

Cual codificacion es mas eficiente o conveniente, dando ambas el mismo
resultado?

Ejemplo1:
insert into tabla_destino
select campo1, campo2 from tabla_origen1
union
select campo3, campo4 from tabla_origen2

Ejemplo2:
Begin Tran
insert into tabla_destino
select campo1, campo2 from tabla_origen1
insert into tabla_destino
select campo3, campo4 from tabla_origen2
Commit Tran

La consulta va orientada a que en el Ejemplo1 la data que se va a
memoria es el acumulado total de los 2 selects y en el Ejemplo2 no
ocurre asi. Desde esa perspectiva, me parece que es mas eficiente el
ejemplo 2, o estoy errado en mi apreciacion?

Veo que los programadores, arman Inserts con el producto de 6 o 7
Selects unidos por UNION, y quisiera conocer la opinion del foro al
respecto, sobre cual codificacion es mas eficiente para la ejecucion,
porque

Saludos,

Juan Carlos Mendoza

Preguntas similare

Leer las respuestas

#1 Jesús López
23/03/2008 - 13:10 | Informe spam
Lo más eficiente sería el ejemplo 1, pero usando UNION ALL en vez de UNION.
Ya que UNION requiere eliminar duplicados lo que supone un procesamiento
adicional.

Es más eficiente el ejemplo1 porque todo lo ejecuta con una única
instrucción.

La diferencia de rendimiento ente usar UNION ALL y usar varias instrucciones
insert es cada vez menos apreciable cuando el número de registros insertados
sea más grande. Estoy seguro que cuando el número de registros es de unos
cuantos cientos, la diferencia de rendimiento es totalmente inapreciable y
no merece la pena preocuparse en absoluto. Tiene sentido usar UNION ALL
cuando cada SELECT va a devolver un único registro (o sólo unos poquitos,
por ejemplo menos de diez).

Saludos:

Jesús López
www.solidq.com


"Juan Carlos Mendoza" escribió en el mensaje
news:
Buenas:

Estoy revisando codificacion de los programadores del area de
desarrollo a fin de sugerir cambios para optimizar los queries.

Cual codificacion es mas eficiente o conveniente, dando ambas el mismo
resultado?

Ejemplo1:
insert into tabla_destino
select campo1, campo2 from tabla_origen1
union
select campo3, campo4 from tabla_origen2

Ejemplo2:
Begin Tran
insert into tabla_destino
select campo1, campo2 from tabla_origen1
insert into tabla_destino
select campo3, campo4 from tabla_origen2
Commit Tran

La consulta va orientada a que en el Ejemplo1 la data que se va a
memoria es el acumulado total de los 2 selects y en el Ejemplo2 no
ocurre asi. Desde esa perspectiva, me parece que es mas eficiente el
ejemplo 2, o estoy errado en mi apreciacion?

Veo que los programadores, arman Inserts con el producto de 6 o 7
Selects unidos por UNION, y quisiera conocer la opinion del foro al
respecto, sobre cual codificacion es mas eficiente para la ejecucion,
porque

Saludos,

Juan Carlos Mendoza
Respuesta Responder a este mensaje
#2 Rolando
23/03/2008 - 14:18 | Informe spam
Ya Jesus Lopez te explico muy bien pero yo te agrego que si probablemente
esa instruccion es de pocos registros, no hay que preocuparse mucho ya que
ni se notará diferencia. Y en el caso de que sea de muchos registros
tambien es probable que no sea muy frecuente sino que sea un proceso en
batch por lo cual tampoco es de preocuparse.
Si no es ninguno de los dos casos que digo pues chequea los planes de
ejecucion para tomar la mejor decision.


"Juan Carlos Mendoza" escribió en el mensaje
news:
Buenas:

Estoy revisando codificacion de los programadores del area de
desarrollo a fin de sugerir cambios para optimizar los queries.

Cual codificacion es mas eficiente o conveniente, dando ambas el mismo
resultado?

Ejemplo1:
insert into tabla_destino
select campo1, campo2 from tabla_origen1
union
select campo3, campo4 from tabla_origen2

Ejemplo2:
Begin Tran
insert into tabla_destino
select campo1, campo2 from tabla_origen1
insert into tabla_destino
select campo3, campo4 from tabla_origen2
Commit Tran

La consulta va orientada a que en el Ejemplo1 la data que se va a
memoria es el acumulado total de los 2 selects y en el Ejemplo2 no
ocurre asi. Desde esa perspectiva, me parece que es mas eficiente el
ejemplo 2, o estoy errado en mi apreciacion?

Veo que los programadores, arman Inserts con el producto de 6 o 7
Selects unidos por UNION, y quisiera conocer la opinion del foro al
respecto, sobre cual codificacion es mas eficiente para la ejecucion,
porque

Saludos,

Juan Carlos Mendoza
Respuesta Responder a este mensaje
#3 Alejandro Mesa
23/03/2008 - 15:36 | Informe spam
Jesús López,

Estoy de acuerdo contigo, pero que tal si quien escribio esa sentencia esta
tratando de evitar duplicados, en ese caso UNION ALL no es de ayuda, al menos
que se use el operador NOT EXISTS en la clausula "where".


AMB

"Jesús López" wrote:

Lo más eficiente sería el ejemplo 1, pero usando UNION ALL en vez de UNION.
Ya que UNION requiere eliminar duplicados lo que supone un procesamiento
adicional.

Es más eficiente el ejemplo1 porque todo lo ejecuta con una única
instrucción.

La diferencia de rendimiento ente usar UNION ALL y usar varias instrucciones
insert es cada vez menos apreciable cuando el número de registros insertados
sea más grande. Estoy seguro que cuando el número de registros es de unos
cuantos cientos, la diferencia de rendimiento es totalmente inapreciable y
no merece la pena preocuparse en absoluto. Tiene sentido usar UNION ALL
cuando cada SELECT va a devolver un único registro (o sólo unos poquitos,
por ejemplo menos de diez).

Saludos:

Jesús López
www.solidq.com


"Juan Carlos Mendoza" escribió en el mensaje
news:
> Buenas:
>
> Estoy revisando codificacion de los programadores del area de
> desarrollo a fin de sugerir cambios para optimizar los queries.
>
> Cual codificacion es mas eficiente o conveniente, dando ambas el mismo
> resultado?
>
> Ejemplo1:
> insert into tabla_destino
> select campo1, campo2 from tabla_origen1
> union
> select campo3, campo4 from tabla_origen2
>
> Ejemplo2:
> Begin Tran
> insert into tabla_destino
> select campo1, campo2 from tabla_origen1
> insert into tabla_destino
> select campo3, campo4 from tabla_origen2
> Commit Tran
>
> La consulta va orientada a que en el Ejemplo1 la data que se va a
> memoria es el acumulado total de los 2 selects y en el Ejemplo2 no
> ocurre asi. Desde esa perspectiva, me parece que es mas eficiente el
> ejemplo 2, o estoy errado en mi apreciacion?
>
> Veo que los programadores, arman Inserts con el producto de 6 o 7
> Selects unidos por UNION, y quisiera conocer la opinion del foro al
> respecto, sobre cual codificacion es mas eficiente para la ejecucion,
> porque
>
> Saludos,
>
> Juan Carlos Mendoza



Respuesta Responder a este mensaje
#4 Alejandro Mesa
23/03/2008 - 15:41 | Informe spam
Juan Carlos Mendoza,

Recuerda agregar control de errores, sobre todo en el segundo ejemplo, donde
la transaccion esta conformada por dos sentencias insert. Las dos sentencias
deben proceder sin fallos o ambas ser canceladas si una de ellas falla.

Con el ejemplo 1, no tendras problemas si existe posibilidad de tener filas
repetidas entre ambas tablas. En cambio, deberas hacer ese chequeo con el
ejemplo 2.


AMB


"Juan Carlos Mendoza" wrote:

Buenas:

Estoy revisando codificacion de los programadores del area de
desarrollo a fin de sugerir cambios para optimizar los queries.

Cual codificacion es mas eficiente o conveniente, dando ambas el mismo
resultado?

Ejemplo1:
insert into tabla_destino
select campo1, campo2 from tabla_origen1
union
select campo3, campo4 from tabla_origen2

Ejemplo2:
Begin Tran
insert into tabla_destino
select campo1, campo2 from tabla_origen1
insert into tabla_destino
select campo3, campo4 from tabla_origen2
Commit Tran

La consulta va orientada a que en el Ejemplo1 la data que se va a
memoria es el acumulado total de los 2 selects y en el Ejemplo2 no
ocurre asi. Desde esa perspectiva, me parece que es mas eficiente el
ejemplo 2, o estoy errado en mi apreciacion?

Veo que los programadores, arman Inserts con el producto de 6 o 7
Selects unidos por UNION, y quisiera conocer la opinion del foro al
respecto, sobre cual codificacion es mas eficiente para la ejecucion,
porque

Saludos,

Juan Carlos Mendoza

Respuesta Responder a este mensaje
#5 Jesús López
24/03/2008 - 15:48 | Informe spam
que tal si quien escribio esa sentencia esta
tratando de evitar duplicados, en ese caso UNION ALL no es de ayuda, al
menos
que se use el operador NOT EXISTS en la clausula "where".



Juan Carlos dice en su pregunta que el ejemplo1 y el ejemplo2 producen el
mismo resultado, así que no hay intención de evitar duplicados ...

Saludos:

Jesús López
www.soliq.com
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida