包含大量数据的表上的最佳索引实践

时间:2017-06-29 07:29:17

标签: sql-server indexing

我的问题是,如果我需要聚簇索引或非聚簇索引。 这是我的情况:

我有一张appr表。 100.000.000条记录。 设计是: tblLarge: Col1 varchar(30)不为空 Col2 varchar(12)不为空 col3 Varchar(30)不为空 insertTime数据时间

我只做插页(很多插页。每天约15000.000)。永远不要更新或删除(我现在截断表格)

唯一的选择是: 从tblLarge中选择Col1,其中Col2 = insertTime desc的'some data'顺序 - 此选择不断执行。

Col2不是唯一的,但永远不会为空。

问题: 1)在我的情况下,什么样的索引最适合表格? 因为我需要Col2的索引。它应该是CLUSTERED还是非CLUSTERED? (有人曾告诉我,表总是应该有一个CLUSTERED索引,但我不确定这是不对的)

2)NOLOCK暗示是好还是坏的做法? (我不介意select是否读取未提交的数据) 从tblLarge(NOLOCK)中选择Col1,其中Col2 = insertTime desc的“某些数据”顺序

提前致谢

1 个答案:

答案 0 :(得分:0)

没有标识列,因此在插入新记录时,聚簇索引需要过多的磁盘活动。您需要在col2上使用非聚集索引,以包含要返回的字段col1:

CREATE NONCLUSTERED INDEX [IX_tblLarge_col2] ON [dbo].[tblLarge]
(
    [col2] ASC
)
INCLUDE (   [col1]) 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]