保存视图时,如何防止SSMS重写代码?


8

我正在创建一个视图,该视图使用带有与WHERE此类似的子句的语句:

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

平均需要10秒钟才能运行。但是,当我尝试将此查询另存为View时,SQL Server(或MS SQL Server Management Studio客户端)“优化”查询以使用此结构,而是:

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

将查询速度减慢到6分钟以上。有什么方法可以禁用此行为,以便视图完全使用我提供的SQL查询吗?

Answers:


14

不要使用SSMS向导。

只需CREATE VIEW dbo.Foo AS SELECT ...在新的查询窗口中输入语句并执行即可。

这将阻止它将查询语法重新排列为语义上等效但性能较差的替代方法。


4
无论如何,所有创建或更改的对象的所有视图,存储的proc,UDF,表等都应始终在脚本中,以便它们可以像所有其他代码一样置于源代码控制中。
HLGEM 2012年

1
有一些图形化的SQL工具很不错,不会做像这样的愚蠢的事情
Earlz 2012年

2
@Earlz是的,但是我想我们都知道我们在专门谈论SSMS,而不是一般的所有图形工具。
亚伦·伯特兰
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.