首页 > 解决方案 > 索引一个大表以在每列中查找不同的值

问题描述

表“TestResult”非常大(超过 20M 行),但并非每个 Test、Student 或 ResultType 都存在于其中。

我想快速获得唯一的 TestId、StudentId 和 ResultTypeId。我目前的策略是按以下方式在前面的每一列上建立一个索引。

CREATE NONCLUSTERED INDEX [NCI_TestResult_ResultTypeId] ON [dbo].[TestResult]
(
    [ResultTypeId] ASC
) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
       SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, 
       ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO

我每列都有一个这样的索引。

这是执行此操作的正确方法,还是有更好的方法来执行此操作,所有三列只有 1 个索引?

我正在使用 SqlServer 2016

架构

标签: sqlsql-server-2008indexing

解决方案


正如 ESG 所说,创建这三个索引是正确的方法,但是如果您在此表上进行批量插入/删除/更新,并且数据量很大,则可能会遇到性能问题。


推荐阅读