【发布时间】:2025-12-05 05:15:01
【问题描述】:
有时(并非总是)我遇到with 的性能问题。后面的SQL不是很好,但通常(正常工作时)性能就足够了。
现在我注意到有时性能真的很差(大约需要 10 倍的时间)。于是我用执行计划检查了SQL。
如果我遇到性能问题,我会收到消息
缺失索引(影响 59.007):创建非聚集索引 ....
所以当我遇到问题和没有问题时,我检查了命名表的索引。在这两种情况下,我都有相同的索引。
现在我的问题是:
- 为什么我有时会收到缺少索引的消息,而有时我的命名表的索引没有更改?
- 您知道为什么我有时会遇到这些性能问题(以及不同的执行计划)吗?
编辑: 创建表语句:
CREATE TABLE [dbo].[t1] (
[c1] [int] IDENTITY(1,1) NOT NULL,
[c2] [nvarchar](50) NULL,
[c3] [nvarchar](50) NULL,
[c4] [nvarchar](50) NULL,
[c5] [date] NULL,
[c6] [date] NULL,
[c7] [nvarchar](50) NULL,
[c8] [int] NULL,
[c9] [int] NULL,
[c10] [nvarchar](50) NULL,
[c11] [decimal](15, 2) NULL,
[c12] [int] NULL,
[c13] [int] NULL,
[c14] [nvarchar](50) NULL
) ON [PRIMARY]
5 个单独的索引(4 个非集群,1 个集群)。
【问题讨论】:
-
用于创建相关表的 SQL 代码和/或脚本在哪里?
-
不同计划的SQL查询是否相同?如果是这样,您可以尝试添加
OPTION(RECOMPILE)提示以避免参数嗅探。将执行计划上传至brentozar.com/pastetheplan -
你能告诉我们在这张表上执行的查询吗?
标签: sql sql-server performance indexing