Optimizacion en IF.....EXISTS

13/11/2007 - 00:08 por Juan Carlos Mendoza | Informe spam
Buenas,

Revisando unos scripts de Desarrollo, veo que tienen sentencias del
tipo

IF EXISTS (SELECT * FROM [tabla] )

eso representa un SCAN TABLE, lo cual se ve al revisar el plan de
ejecucion.
Les estuve sugiriendo que lo cambien por

IF EXISTS (SELECT 1 FROM [tabla] )
barre la tabla pero por el indice principal, el cual tiene la tabla
que agarre como ejemplo.

Luego me dí cuenta que demoraba como 50 segundos en su ejecución, pero
al cambiarlo de esta manera

IF EXISTS (SELECT TOP 1 1 FROM [tabla] )
El tiempo bajo dramaticamente a escasos 2 segundos.

A todas las luces, se ve que la tercera forma es la que se ejecutará
mas rápido y será la que sintacticamente convenga realizar.

Aca viene la consulta:
En los costs del primero es un 100% (Scan Table), en el segundo me dio
un costo 100% (Index Scan), pero en el tercero me da un costo de 4536%
(Index Scan) y 0% (Top) lo cual no entiendo o no me explico el porque

(Nota: el WHERE posible del select lo he omitido adrede)

Cualquier orientacion sera agradecida.

Saludos,

Juan Carlos Mendoza
Callao - šPeru
 

Leer las respuestas

#1 Maxi
13/11/2007 - 00:34 | Informe spam
Hola, ojo con los porcentajes porque en 2000 hay veces que no dan numeros
correctos.
Yo no tratatia de hacer un select * from tabla ya que esto siempre hara un
tablescan , porque no ponen condiciones en el where?




Microsoft MVP SQLServer
www.sqltotalconsulting.com
-
"Juan Carlos Mendoza" escribió en el mensaje de
noticias news:
Buenas,

Revisando unos scripts de Desarrollo, veo que tienen sentencias del
tipo

IF EXISTS (SELECT * FROM [tabla] )

eso representa un SCAN TABLE, lo cual se ve al revisar el plan de
ejecucion.
Les estuve sugiriendo que lo cambien por

IF EXISTS (SELECT 1 FROM [tabla] )
barre la tabla pero por el indice principal, el cual tiene la tabla
que agarre como ejemplo.

Luego me dí cuenta que demoraba como 50 segundos en su ejecución, pero
al cambiarlo de esta manera

IF EXISTS (SELECT TOP 1 1 FROM [tabla] )
El tiempo bajo dramaticamente a escasos 2 segundos.

A todas las luces, se ve que la tercera forma es la que se ejecutará
mas rápido y será la que sintacticamente convenga realizar.

Aca viene la consulta:
En los costs del primero es un 100% (Scan Table), en el segundo me dio
un costo 100% (Index Scan), pero en el tercero me da un costo de 4536%
(Index Scan) y 0% (Top) lo cual no entiendo o no me explico el porque

(Nota: el WHERE posible del select lo he omitido adrede)

Cualquier orientacion sera agradecida.

Saludos,

Juan Carlos Mendoza
Callao - šPeru

Preguntas similares