【问题标题】:Is it possible to merge these non clustered indexes to reduce space?是否可以合并这些非聚集索引以减少空间?
【发布时间】:2016-04-04 03:03:51
【问题描述】:

仍在学习 SQL Server 2008 R2 中的索引。

我在一张表上有三个索引,大约有 1000 万行数据我想知道是否可以合并索引以减少空间,因为它们每个需要几个 gig。

查询:

Select * 
From dbo.Table1
Where ColumnA in ('1')

Select * 
From dbo.Table1
Where ColumnA in ('1')
  And ColumnB in ('2')

Select * 
From dbo.Table1
Where ColumnA in ('1')
  And ColumnB in ('2')
  And ColumnC in ('3')

索引:

Create Nonclustered Index [SomeIndex1] 
on dbo.Table1 (ColumnA Asc)
Include(ColumnB, ColumnC, ColumnD)

Create Nonclustered Index [SomeIndex2] 
on dbo.Table1(ColumnA Asc, ColumnB Asc)
Include (ColumnC, ColumnD)

Create Nonclustered Index [SomeIndex3] 
on dbo.Table1(ColumnA Asc, ColumnB Asc, ColumnC Asc)
Include (ColumnD)

【问题讨论】:

  • 如果您的唯一目标是减少空间使用,只需删除所有索引。
  • SomeIndex3 实际上应该能够很好地处理所有三个示例查询 - 其他两个索引并没有太大的好处 - 如果你真的想减少索引的数量,那么删除SomeIndex1SomeIndex2

标签: sql-server indexing sql-server-2008-r2


【解决方案1】:

删除除最后一个索引之外的所有索引SomeIndex3

前两个索引是完全多余的。此外,如果您的表上还没有聚集索引,并且没有理由不使用它,那么创建一个与SomeIndex3 具有相同索引的聚集索引并删除SomeIndex3

【讨论】:

  • 在不了解更多信息的情况下,我不会这么快就获得关于集群密钥的建议。聚类键的一个很好的候选者是窄的、唯一的并且不断增加。我们不知道 (a,b,c) 的属性是否适用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-17
  • 2011-08-21
  • 1970-01-01
  • 2014-01-08
  • 1970-01-01
  • 1970-01-01
  • 2011-06-04
相关资源
最近更新 更多