Cual select se ejecuta mas rapido

06/05/2009 - 19:03 por jpablos | Informe spam
Saludos

Tengo una consulta cual de estas formas de hacer un select se ejecuta mas
rapido y en que orden ???

Select *
from gtge_personas pe gtba_bancos ba
where codigo_empresa = @codigo_empresa
and pe.codigo_empresa = ba.codigo_empresa

Select *
from gtge_personas pe gtba_bancos ba
where pe.codigo_empresa = ba.codigo_empresa
and pe.codigo_empresa = @codigo_empresa

Select *
from gtge_personas pe inner join gtba_bancos ba on
pe.codigo_empresa = ba.codigo_empresa
where pe.codigo_empresa = @codigo_empresa

De estos tres selects de ejemplo cual se ejecuta mas rapido y cual mas
lento, hay otra forma mas optima de hacerlo para que se ejecute mas rapido
????
Que herramienta me puede ayudar a comparar la velocidad de ejecucion de un
select para poder realizarlos de mejor manera ..

Gracias .

Preguntas similare

Leer las respuestas

#1 Gustavo Larriera
06/05/2009 - 19:08 | Informe spam
Para comparar rendimiento de consultas lo mejor es analizar el plan de
ejecución.

SQL Server Query Execution Plan Analysis
http://www.sql-server-performance.c...is_p1.aspx

Gustavo Larriera, Microsoft MVP
http://www.linkedin.com/in/gustavolarriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"jpablos" wrote:

Saludos

Tengo una consulta cual de estas formas de hacer un select se ejecuta mas
rapido y en que orden ???

Select *
from gtge_personas pe gtba_bancos ba
where codigo_empresa = @codigo_empresa
and pe.codigo_empresa = ba.codigo_empresa

Select *
from gtge_personas pe gtba_bancos ba
where pe.codigo_empresa = ba.codigo_empresa
and pe.codigo_empresa = @codigo_empresa

Select *
from gtge_personas pe inner join gtba_bancos ba on
pe.codigo_empresa = ba.codigo_empresa
where pe.codigo_empresa = @codigo_empresa

De estos tres selects de ejemplo cual se ejecuta mas rapido y cual mas
lento, hay otra forma mas optima de hacerlo para que se ejecute mas rapido
????
Que herramienta me puede ayudar a comparar la velocidad de ejecucion de un
select para poder realizarlos de mejor manera ..

Gracias .
Respuesta Responder a este mensaje
#2 Carlos Sacristan
07/05/2009 - 08:47 | Informe spam
Adicional a lo que comenta Gustavo, puedes descargarte el ebook gratuito
sobre la interpretación de los planes de ejecución en
http://downloads.red-gate.com/ebook..._ebook.zip



Está en inglés, pero es lo más completo sobre el tema que conozco.


Un saludo
-
www.navento.com
Servicios de Localización GPS

http://blogs.solidq.com/ES/ElRincon...fault.aspx

"jpablos" escribió en el mensaje
news:
Saludos

Tengo una consulta cual de estas formas de hacer un select se ejecuta mas
rapido y en que orden ???

Select *
from gtge_personas pe gtba_bancos ba
where codigo_empresa = @codigo_empresa
and pe.codigo_empresa = ba.codigo_empresa

Select *
from gtge_personas pe gtba_bancos ba
where pe.codigo_empresa = ba.codigo_empresa
and pe.codigo_empresa = @codigo_empresa

Select *
from gtge_personas pe inner join gtba_bancos ba on
pe.codigo_empresa = ba.codigo_empresa
where pe.codigo_empresa = @codigo_empresa

De estos tres selects de ejemplo cual se ejecuta mas rapido y cual mas
lento, hay otra forma mas optima de hacerlo para que se ejecute mas rapido
????
Que herramienta me puede ayudar a comparar la velocidad de ejecucion de un
select para poder realizarlos de mejor manera ..

Gracias .
Respuesta Responder a este mensaje
#3 Penta
08/05/2009 - 05:15 | Informe spam
Espero no equivocarme, entiendo que el campo de la izquierda de la
comparacion debe ser el que tiene menos registros.

Tabla1
campo1
5 registros

Tabla 2
campo1
1000 registros

Entonces:
Select * From Tabla1 A Inner Join Tabla2 B
On a.campo1=b.campo1

En tu caso asumire que la tabla gtba_bancos tiene muchos menos
registros que la tabla personas, por lo tanto:
Select *
from gtge_personas pe inner join gtba_bancos ba
on ba.codigo_empresa =pe.codigo_empresa

en vez de esta comparacion:
on pe.codigo_empresa = ba.codigo_empresa


En cuanto al filtro no se si afecta pero muchos pensamos que es mas
claro ponerlo dentro del join:
on ba.codigo_empresa =pe.codigo_empresa and pe.codigo_empresa @codigo_empresa

PS. Si es que es al reves seria magnifico que los maestros me
corrigan, ahora si no tiene nada que ver me dejaria de preocupar cual
tabla tiene menos registros.

Atte.
PENTA
Respuesta Responder a este mensaje
#4 Carlos Sacristan
08/05/2009 - 08:55 | Informe spam
No, en ese tipo de combinación da igual ponerlo a la derecha que a la
izquierda.

En cuanto a tu comentario del filtro, personalmente prefiero poner lo que es
combinación en la parte del JOIN y lo que es filtro en el WHERE. Creo que
eso es lo más claro. En cualquier caso, nuevamente en ese tipo de
combinación (INNER JOIN) da igual dónde ponerlo; ahora, cuando ten en cuenta
que eso sí afecta a otro tipo de combinaciones (LEFT JOIN y RIGHT JOIN).

En cualquier caso, este tipo de cosas siempre podrás probarlo echando un
vistazo al plan de ejecución. Eso es lo que te va a sacar de dudas.

Un saludo
-
www.navento.com
Servicios de Localización GPS

http://blogs.solidq.com/ES/ElRincon...fault.aspx

"Penta" escribió en el mensaje
news:
Espero no equivocarme, entiendo que el campo de la izquierda de la
comparacion debe ser el que tiene menos registros.

Tabla1
campo1
5 registros

Tabla 2
campo1
1000 registros

Entonces:
Select * From Tabla1 A Inner Join Tabla2 B
On a.campo1=b.campo1

En tu caso asumire que la tabla gtba_bancos tiene muchos menos
registros que la tabla personas, por lo tanto:
Select *
from gtge_personas pe inner join gtba_bancos ba
on ba.codigo_empresa =pe.codigo_empresa

en vez de esta comparacion:
on pe.codigo_empresa = ba.codigo_empresa


En cuanto al filtro no se si afecta pero muchos pensamos que es mas
claro ponerlo dentro del join:
on ba.codigo_empresa =pe.codigo_empresa and pe.codigo_empresa > @codigo_empresa

PS. Si es que es al reves seria magnifico que los maestros me
corrigan, ahora si no tiene nada que ver me dejaria de preocupar cual
tabla tiene menos registros.

Atte.
PENTA


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