我的问题是,如果我需要聚簇索引或非聚簇索引。 这是我的情况:
我有一张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的“某些数据”顺序
提前致谢
答案 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]