SQL Server:比单独的查询慢得多

问题描述 投票:3回答:1

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

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:

sql-server tsql sql-server-2014
1个回答
0
投票

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

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

例如:

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

© www.soinside.com 2019 - 2024. All rights reserved.