【问题标题】:Best index practice on table containing large amount of data包含大量数据的表的最佳索引实践
【发布时间】:2017-06-29 07:29:17
【问题描述】:

我的问题是,我需要聚集索引还是非聚集索引。 这是我的情况:

我有一张带 appr 的桌子。 100.000.000 条记录。 设计是: tbl大: Col1 varchar(30) 不为空 Col2 varchar(12) 不为空 col3 Varchar(30) 不为空 insertTime 数据时间

我只做插入(很多插入。每天大约 15.000.000 个)。从不更新或删除(我不时截断表格)

唯一的选择是: 从 tblLarge 中选择 Col1,其中 Col2 = 'some data' order by insertTime desc - 这个选择是不断执行的。

Col2 不是唯一的,但绝不为空。

问题: 1)在我的情况下,哪种索引最适合应用于表? 当然,我需要一个关于 Col2 的索引。它应该是集群的还是非集群的? (有人曾经告诉我,表总是应该有一个 CLUSTERED 索引,但我不确定这是否正确)

2) NOLOCK 提示是好还是坏的做法? (我不介意选择是否读取未提交的数据) select Col1 from tblLarge(NOLOCK) where Col2 = 'some data' order by insertTime desc

提前致谢

【问题讨论】:

    标签: sql-server indexing


    【解决方案1】:

    没有标识列,因此在插入新记录时,聚集索引需要过多的磁盘活动。您需要 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]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 2011-08-24
      • 2023-04-08
      • 2011-04-17
      • 2015-03-12
      • 2015-10-17
      相关资源
      最近更新 更多