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