【问题标题】:Indexing a large table to find distinct values in each columns索引一个大表以在每列中查找不同的值
【发布时间】:2019-01-31 19:09:46
【问题描述】:

“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

【问题讨论】:

  • 澄清一下,您希望每个独特的 TestIdStudentIdResultTypeId 独立,而不是所有 3 个的独特组合?
  • @ESG - 正确。
  • 那么我相信创建这 3 个索引是正确的方法

标签: sql sql-server-2008 indexing


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-14
    • 2014-12-21
    • 1970-01-01
    • 1970-01-01
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    • 2013-08-14
    相关资源
    最近更新 更多