小编Dav*_*ack的帖子

需要帮助调整复杂的查询

我继承了一个相当复杂的存储过程,它导致我们的生产环境超时。我使用 SQL Sentry Plan Explorer 来帮助我查看一些问题。我已经确定了一些,但我很难想出可以进行的优化。我们正在使用 SQL Server 2019 和COMPATIBILITY_VERSION = 150.

该存储过程通过 API 调用将数据返回到 Web 客户端,因此页面加载的性能非常重要。通过多个应用程序分析会话,此存储过程已被确定为瓶颈。

以下是已发现的一些问题:

  1. PROD 中存在超过 4 百万行数据的超时 (ActualElapsedms = 11499)
  2. 估计子树成本高达 187.74(我们下一个最慢的存储过程的子树成本为 0.653)
  3. 查询计划的部分内容显示了剩余 I/O(令人惊讶的是其中之一甚至是索引查找)
  4. tempdb溢出数据警告
  5. 逻辑读取接近128k
  6. Sentry 显示 3 个缺失的 JOIN 谓词,INSERT INTO @ValidRows....但我不知道如何识别它们。

所涉及的表上有索引,从我看来它们似乎足够了。但是,我看到许多索引扫描在计划中被称为问题区域(黄色突出显示)

以下是实际执行计划的链接:https://www.brentozar.com/pastetheplan/ ?id=S1TN4NOS9

CREATE VIEW [dbo].[DailyNotePublishedContentView]
WITH SCHEMABINDING
AS 
SELECT
    T.Id AS DailyNoteContentId,
    T.DateModified,
    T.ModifiedBy,
    T.Region,
    T.DateAdded,
    T.CreatedBy,
    V.Id AS VersionId,
    V.DateAdded AS VersionDateAdded,
    V.CreatedBy as VersionCreatedBy,
    V.ContentType,
    V.DateDue,
    V.IsPrivate,
    V.ProjectId,
    V.PublishDate,
    V.AuthorTeamId, …
Run Code Online (Sandbox Code Playgroud)

sql-server index-tuning performance-tuning

2
推荐指数
1
解决办法
359
查看次数