我已经继承了以下SQL Server存储过程(在Azure SQL Server上):
PROCEDURE [Sources].[DeleteRawCaptures]
(@SourceId BIGINT,
@Count INT OUTPUT)
AS
BEGIN
SET NOCOUNT ON
SET ROWCOUNT 500
DECLARE @BatchId uniqueidentifier
SELECT @BatchId = CaptureBatch
FROM [Data].[RawCaptures]
WHERE CaptureId = (SELECT MAX(CaptureId)
FROM [Data].[RawCaptures]
WHERE SourceId = @SourceId)
DELETE FROM [Data].[RawCaptures]
WHERE SourceId = @SourceId
AND CaptureBatch <> @BatchId
SET @Count = @@ROWCOUNT
END
经过数月的无问题工作,直到最近才超时。在我能够与他联系的短暂时间内,构建解决方案的前开发人员建议,Data.RawCaptures表上可能需要一个附加索引,因为他几个月前上次遇到错误时,他需要添加另一个索引。不幸的是,他没有比这更具体的了。
我对SQL Server索引的了解还不足以确定什么类型的索引以及在哪些列上,我应该确保有适当的位置,以确保上面的存储过程以其最佳性能运行。 / p>
这些是当前已存在的 索引:
请澄清一下,以防索引标题提供的信息不足:
CaptureBatch
和Status
CaptureDateTime
SourceId
和CaptureBatch
SourceId
和Status
SourceId
Status
Status
和CaptureDateTime
仅供参考,还有两个与此过程相关的存储过程,并且包含上面其他字段,这些字段未出现在我发布的存储过程中。
Data.RawCaptures中的数据量开始呈指数增长。因此,我想知道我是否需要该表的另一个索引(甚至可能是其他类型的索引?),或者已经存在的索引是否应该覆盖我。如果是后者,我将开始调查其他途径以确定超时的原因。
不幸的是,Azure SQL数据库不支持SQL Server配置文件。我需要发现另一种方法。
此处的查询执行计划: