Que es mas eficiente? condicion en INNER o en WHERE

09/08/2007 - 01:26 por Juan Carlos Mendoza | Informe spam
Buenas,

Revisando un pase a produccion, encontre que el desarrollador habia
colocado en el inner join condiciones de seleccion a manera de un
where, le pedi que me explicara porque no lo habia colocado en el
bloque del WHERE y me explico que el JOIN se realiza primero con la
condicion del mismo, y que será mas eficiente pues traera menos filas
que si se incluye en el WHERE donde hara una seleccion sobre las filas
traidas con el INNER. No pude ni afirmar ni refutar su idea, asi es
que me permito elevarles la consulta, pero hice un script para simular
y al analizarlo me salio lo mismo (Display Estimated Execution Plan)

create table ut_prueba1 (
codigo char(02),
nombre varchar(10))
GO
create table ut_prueba2 (
codigo char(02),
nombre varchar(10),
sexo char(1))
Go
set nocount on
insert into ut_prueba1 values ( '01','obrero')
insert into ut_prueba1 values ( '01','obrero')
insert into ut_prueba2 values ( '01','alfonso','m')
insert into ut_prueba2 values ( '02','alberto','m')
insert into ut_prueba2 values ( '03','Ana Maria','f')
insert into ut_prueba2 values ( '04','Bertha','f')
GO


Que es mejor o mas optimo:

(Opcion 1)
Select t1.codigo, t1.nombre, t2.nombre
From ut_prueba1 t1
inner join ut_prueba2 t2 on t1.codigo = t2.codigo
and t2.sexo = 'm'
GO

(Opcion 2)
Select t1.codigo, t1.nombre, t2.nombre
From ut_prueba1 t1
inner join ut_prueba2 t2 on t1.codigo = t2.codigo
where t2.sexo = 'm'
GO


Aunque el ejemplo es pobre en cantidad de filas, que pasaria en la
practica donde manejamos miles de filas?

Saludos,

Juan Carlos Mendoza

Preguntas similare

Leer las respuestas

#21 Luis Tarzia
16/08/2007 - 07:40 | Informe spam
Una cosa es con un ejemplo de 1000 filas y otra con la base en
produccion,con cuantos procesadores use la maquina,si hace
paralelismo,hash,loop,merge,etc,etc.,etc.
"Salvador Ramos" escribió en el
mensaje news:
Nadie ha hablado de dibujitos ni similar en ningún momento. Es más, ante


tus
puntualizaciones, he revisado los planes de ejecución para confirmarlo, y


si
digo que los planes de ejecución son iguales, es que son iguales, nadie ha
dicho que sean iguales los dibujitos ni nada por el estilo. Si te queda
alguna duda pruebalos y verifica toda la información que ofrecen, y verás
que "son iguales".

Un saludo
Salvador Ramos

www.helpdna.net (información sobre SQL Server y Microsoft .Net)
www.helpdna.net/acerca_de_salvador_ramos.htm


"Luis Tarzia" escribió en el mensaje
news:
> Los mismos dibujitos en el plan no significa mucho si no se lee todo lo
> accesorio como filas estimadas,uso de disco y todo eso.
> "Salvador Ramos" escribió en el
> mensaje news:eZKO#
>> Claro que no, que tenga el mismo plan de ejecución quiere decir
> simplemente
>> que en ese caso concreto vas a obtener resultados idénticos en ambos
> casos.
>> En ese caso en concreto da igual optar por una o por otra en cuanto a
>> rendimiento, simplemente será cuestión de elegir la sintaxis que
> prefiramos.
>>
>> Un saludo
>> Salvador Ramos
>>
>> www.helpdna.net (información sobre SQL Server y Microsoft .Net)
>> www.helpdna.net/acerca_de_salvador_ramos.htm
>>
>>
>> "Luis Tarzia" escribió en el mensaje
>> news:Os3%
>> > Que sea el mismo plan de ejecucion no quiere decir que resuelva los
>> > resultados mas rapidos con la condicion en el join,acuerdense que los
>> > planes
>> > de ejecucion son en base a la menor lectura posible de disco.
>> > "Salvador Ramos" escribió en el
>> > mensaje news:
>> >> Efectivamente,
>> >>
>> >> En esos casos hay que revisar los planes de ejecución, es más, en


ese
>> >> ejemplo es el mismo plan de ejecución plan de ejecución (no los he
>> > probado,
>> >> pero si que deben ser iguales) :-)
>> >>
>> >> Un saludo
>> >> Salvador Ramos
>> >>
>> >> www.helpdna.net (información sobre SQL Server y Microsoft .Net)
>> >> www.helpdna.net/acerca_de_salvador_ramos.htm
>> >>
>> >>
>> >> "Maxi" escribió en el mensaje
>> >> news:
>> >> > Hola, eso no siempre es cierto, paras poder hacer un buen analisis
>> >> > siemnpre debes ver los planes de ejecucion
>> >> >
>> >> >
>> >> > Salu2
>> >> >
>> >> > Microsoft MVP SQL Server
>> >> > Culminis Speaker
>> >> >
>> >> > "Juan Carlos Mendoza" escribió en el
>> >> > mensaje
>> >> > news:
>> >> > Buenas,
>> >> >
>> >> > Revisando un pase a produccion, encontre que el desarrollador


habia
>> >> > colocado en el inner join condiciones de seleccion a manera de un
>> >> > where, le pedi que me explicara porque no lo habia colocado en el
>> >> > bloque del WHERE y me explico que el JOIN se realiza primero con


la
>> >> > condicion del mismo, y que será mas eficiente pues traera menos
>> >> > filas
>> >> > que si se incluye en el WHERE donde hara una seleccion sobre las
> filas
>> >> > traidas con el INNER. No pude ni afirmar ni refutar su idea, asi


es
>> >> > que me permito elevarles la consulta, pero hice un script para
> simular
>> >> > y al analizarlo me salio lo mismo (Display Estimated Execution


Plan)
>> >> >
>> >> > create table ut_prueba1 (
>> >> > codigo char(02),
>> >> > nombre varchar(10))
>> >> > GO
>> >> > create table ut_prueba2 (
>> >> > codigo char(02),
>> >> > nombre varchar(10),
>> >> > sexo char(1))
>> >> > Go
>> >> > set nocount on
>> >> > insert into ut_prueba1 values ( '01','obrero')
>> >> > insert into ut_prueba1 values ( '01','obrero')
>> >> > insert into ut_prueba2 values ( '01','alfonso','m')
>> >> > insert into ut_prueba2 values ( '02','alberto','m')
>> >> > insert into ut_prueba2 values ( '03','Ana Maria','f')
>> >> > insert into ut_prueba2 values ( '04','Bertha','f')
>> >> > GO
>> >> >
>> >> >
>> >> > Que es mejor o mas optimo:
>> >> >
>> >> > (Opcion 1)
>> >> > Select t1.codigo, t1.nombre, t2.nombre
>> >> > From ut_prueba1 t1
>> >> > inner join ut_prueba2 t2 on t1.codigo = t2.codigo
>> >> > and t2.sexo = 'm'
>> >> > GO
>> >> >
>> >> > (Opcion 2)
>> >> > Select t1.codigo, t1.nombre, t2.nombre
>> >> > From ut_prueba1 t1
>> >> > inner join ut_prueba2 t2 on t1.codigo = t2.codigo
>> >> > where t2.sexo = 'm'
>> >> > GO
>> >> >
>> >> >
>> >> > Aunque el ejemplo es pobre en cantidad de filas, que pasaria en la
>> >> > practica donde manejamos miles de filas?
>> >> >
>> >> > Saludos,
>> >> >
>> >> > Juan Carlos Mendoza
>> >> >
>> >> >
>> >>
>> >>
>> >
>> >
>>
>>
>
>


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida