Come posso impedire a SSMS di riscrivere il mio codice durante il salvataggio di una vista?


8

Sto creando una vista che utilizza un'istruzione con una WHEREclausola simile a questa:

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

che richiede una media di 10 secondi per l'esecuzione. Tuttavia, quando provo a salvare questa query come vista, SQL Server (o il client MS SQL Server Management Studio) "ottimizza" la query per utilizzare questa struttura, invece:

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

Rallentando la query a 6+ minuti. Esiste un modo per disabilitare questo comportamento, in modo che la vista utilizzi esattamente la query SQL che gli ho dato?

Risposte:


14

Non utilizzare le procedure guidate SSMS.

basta digitare la tua CREATE VIEW dbo.Foo AS SELECT ...dichiarazione in una nuova finestra di query ed eseguirla.

Ciò impedirà di riorganizzare la sintassi della query in alternative semanticamente equivalenti ma con prestazioni peggiori.


4
E tutte le viste, i processi memorizzati, le UDF, le tabelle, ecc., Tutti gli oggetti creati o modificati devono essere comunque nello script in modo da poter essere sottoposti al controllo del codice sorgente come tutti gli altri codici.
HLGEM,

1
Ci sono alcuni strumenti grafici SQL là fuori che sono decenti e non faranno cose stupide come questa
Earlz

2
@Earlz vero, ma penso che tutti sappiamo che stiamo parlando specificamente di SSMS, non di tutti gli strumenti grafici in generale.
Aaron Bertrand
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.