SQL Server:本身查看速度比同一查询慢

时间:2018-07-01 19:09:33

标签: sql-server tsql sql-server-2014

从该SO答案中,视图应提供与直接使用相同查询相同的性能。

Is querying over a view slower than executing SQL directly?

我认为这是不正确的。

此查询以视图为目标

SELECT 
    * 
FROM 
    [Front].[vw_Details] k
WHERE 
    k.Id = 970435

需要10秒才能完成。从视图复制查询并向其中添加WHERE k.Id = 970435不到1秒即可完成。该视图没什么特别的,它有4个LEFT JOIN和一些CASE指令来清理数据。

我如何找出问题所在,或者需要什么完成该问题才能使之负责?

更新1:

1 个答案:

答案 0 :(得分:1)

您的查询计划不再可见,但是如果您查看计划,您很可能会看到一个三角形抱怨基数估计和/或隐式声明。这意味着您以一种难以猜测SQL引擎键的方式连接表。

当您直接从查询中运行时,这是即时的,可能是因为它不需要猜测密钥的大小是

例如:

k.Id = 970435 

SQLSERVER已经知道它正在寻找970435的6位数字。 它可以消除所有以9开头且没有6位数字的键。 :)

但是,从某种角度来说,它必须以解决未知的方式来构建计划。因为它不知道它可能持有什么样的钥匙。

有关可以帮助您的各种示例和方案,请参阅Microsoft。

https://docs.microsoft.com/en-us/sql/relational-databases/query-processing-architecture-guide?view=sql-server-ver15