¿Cómo puedo evitar que SSMS vuelva a escribir mi código al guardar una vista?

8

Estoy creando una vista que usa una declaración con una WHEREcláusula similar a esta:

WHERE
    (
        col1 IS NOT NULL
        OR
        col2 IS NOT NULL
    )
    AND
    NOT EXISTS (SELECT ...)

que tarda un promedio de 10 segundos en ejecutarse. Sin embargo, cuando intento guardar esta consulta como una Vista, SQL Server (o el Cliente MS SQL Server Management Studio) "optimiza" la consulta para usar esta estructura, en su lugar:

WHERE
    (col1 IS NOT NULL AND NOT EXISTS (SELECT ...))
    OR
    (col2 IS NOT NULL AND NOT EXISTS (SELECT ...))

Retrasando la consulta a más de 6 minutos. ¿Hay alguna forma de deshabilitar este comportamiento, para que la vista use exactamente la consulta SQL que le doy?

Zikes
fuente

Respuestas:

14

No use los asistentes de SSMS.

solo escribe tu CREATE VIEW dbo.Foo AS SELECT ... declaración en una nueva ventana de consulta y ejecútela.

Esto evitará que reorganice la sintaxis de la consulta a alternativas semánticamente equivalentes pero de peor rendimiento.

Martin Smith
fuente
44
Y todas las vistas, procesos almacenados, UDF, tabla, etc., todos los objetos creados o modificados deben estar en el script de todos modos para que puedan colocarse en el control de origen como todos los demás códigos.
HLGEM
1
Hay algunas herramientas gráficas de SQL que son decentes y que no harán cosas estúpidas como esta
Earlz el
2
@ Earlz es cierto, pero creo que todos sabemos que estamos hablando específicamente de SSMS, no de todas las herramientas gráficas en general.
Aaron Bertrand