【发布时间】:2026-02-19 19:45:01
【问题描述】:
如果我的表 Mission 具有以下结构:
emp_num int P.K
from_date datetime P.K
to_date datetime P.K
mission_location varchar(200)
mission_desc varchar(200)
req_ser int P.K
req_year int P.K
CONSTRAINT [pkc_mission] PRIMARY KEY CLUSTERED
(
[emp_num] ASC,
[from_date] ASC,
[to_date] ASC,
[ req_ser] ASC,
[ req_year] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
当我尝试运行此查询时:
select *
from mission where emp_num =5307
它运行得非常快,但是当我尝试使用另一个值运行相同的查询时,它需要很长时间!
select *
from mission where emp_num =4595
【问题讨论】:
-
检查执行计划可能是参数嗅探。第二个查询可能仍使用旧的执行计划。尝试运行此
select * from mission where emp_num =4595 OPTION (RECOMPILE); -
可能你运行了第一个查询并且结果存在于缓存中(而新的查询不存在)。
-
也许员工 4595 在表中有无数行,而员工 5307 只有一个。
-
@AnynameDonotcare 表有多大(行数和大小)?请运行
exec sp_spaceused 'dbo.[mission]' -
表很小,我们可以保存运行这个
ALTER INDEX [pkc_mission] ON [dbo].[Mission] REBUILD- 这应该重建索引和统计信息。之后再次执行您的查询。
标签: sql sql-server database performance sql-server-2012