查询运行速度很快:
DECLARE @SessionGUID uniqueidentifier
SET @SessionGUID = 'BCBA333C-B6A1-4155-9833-C495F22EA908'
SELECT *
FROM Report_Opener
WHERE SessionGUID = @SessionGUID
ORDER BY CurrencyTypeOrder, Rank
Run Code Online (Sandbox Code Playgroud)
子树成本:0.502
但是将相同的SQL放在存储过程中运行速度很慢,并且执行计划完全不同
CREATE PROCEDURE dbo.ViewOpener @SessionGUID uniqueidentifier AS
SELECT *
FROM Report_Opener
WHERE SessionGUID = @SessionGUID
ORDER BY CurrencyTypeOrder, Rank
EXECUTE ViewOpener @SessionGUID
Run Code Online (Sandbox Code Playgroud)
子树成本:19.2
我跑了
sp_recompile ViewOpener
Run Code Online (Sandbox Code Playgroud)
它仍然运行相同(严重),我也已将存储过程更改为
CREATE PROCEDURE dbo.ViewOpener @SessionGUID uniqueidentifier AS
SELECT *, 'recompile please'
FROM Report_Opener
WHERE SessionGUID = @SessionGUID
ORDER BY CurrencyTypeOrder, Rank
Run Code Online (Sandbox Code Playgroud)
然后再回来,试图真正欺骗它重新编译.
我已经删除并重新创建存储过程以使其生成新计划.
我尝试使用一个诱饵变量强制重新编译,并防止参数嗅探:
CREATE PROCEDURE dbo.ViewOpener @SessionGUID uniqueidentifier AS
DECLARE …Run Code Online (Sandbox Code Playgroud) 我们最近在当前的SQL Server数据库中遇到了与性能相关的主要问题.我们的应用程序在单个表上非常繁重,我们进行了一些分析,大约90%的数据库数据都在一个表中.我们在此表上运行了大量查询以用于分析目的,我们现在遇到了主要的性能问题,即使添加单个列有时会减慢我们当前的Sp.我们的大多数团队都是开发人员,我们无法访问dba,这可能有助于重新调整当前数据库并使工作更快.
这些约束的原因我们正考虑将应用程序的这一部分移动到NoSQL数据库.我的问题是: