小编Ily*_*dik的帖子

如何调查 Sql Server 选择“错误”索引的原因?

我有一个包含大约 2 亿条记录的事务表,一个主键聚集在 Id 上,还有 2 个索引:

  • IX_SiloId_ChangedTime_IncludeTime
  • IX_SiloId_Time_IncludeContent

在继续实际查询以更新统计信息之前,我运行这两条语句

Update STATISTICS dbo.[Transaction] IX_SiloId_ChangedTime_IncludeTime WITH FULLSCAN
Update STATISTICS dbo.[Transaction] IX_SiloId_Time_IncludeContent WITH FULLSCAN
Run Code Online (Sandbox Code Playgroud)

这是我的查询:

DECLARE @Query SiloTimeQueryTableType -- (SiloId, Time) with primary key clustered on SiloId
INSERT INTO @Query VALUES 
(1, '2020-12-31'), -- 1000 total values, though it's still the same problem with just one

SELECT  t.*
FROM    [Transaction] t
INNER JOIN @Query q
    ON t.SiloId = q.SiloId
WHERE 
    t.Time >= q.Time

Run Code Online (Sandbox Code Playgroud)

现在发生的情况是 Sql Server 选择的原因IX_SiloId_ChangedTime_IncludeTime。然后就需要永远。如果我使用,WITH (INDEX(IX_SiloId_Time_IncludeContent))我会立即得到结果。 …

index sql-server execution-plan

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

标签 统计

execution-plan ×1

index ×1

sql-server ×1