Mae*_*024 6 index index-tuning
为同一列设置聚集索引和非聚集索引是否有意义
我继承了一个数据库和一个与之配套的 Web 服务。
查看重复项的索引,我看到两个索引指向同一列(1 列并以相同方式排序)。一个是聚集的,一个不是,这是我看到的唯一区别。
AMt*_*two 11
在解决这两个问题之前,让我简要定义聚簇索引和非聚簇索引之间的区别。
聚集索引由键列组织。它还包括每隔一列作为行结构的一部分(即,它具有整行)。
非聚集索引也由键列组织。它隐含地包括集群键列(如果表是集群的),或指向行的指针(如果表是堆)。如果INCLUDE明确指定了任何列,它们也将包含在索引结构中。
保留这两个是否有意义?
有一个极端情况,让非聚集索引“复制”聚集索引是有意义的。如果您有一个频繁扫描表的查询,并且仅使用聚集键列,则查询优化器将更喜欢使用非聚集索引。非聚集索引不包含全行数据,因此占用的物理空间较少。因为它占用更少的物理空间,SQL Server 可以用更少的 IO 扫描表,并且出于性能原因将使用它。
可以查询sys.dm_db_index_usage_stats,可以看到两个索引上的user_seeks和的个数user_scans。这将帮助您了解这两个索引的使用情况,并确定这两个索引的有用性。
如果我删除一个,我应该删除哪一个?
作为一般规则,大多数表都应该有一个聚集索引。(那是另外一个话题了)。不知道有关您的索引使用或数据访问的任何详细信息,我猜想如果您要删除一个,您将删除非聚集索引(但是,这确实是基于我所知道的猜测)。
根据聚簇键、数据、数据访问模式等,最正确的答案可能是删除聚簇索引并创建不同的聚簇索引。您可能想阅读有关Effective Clustered Indexes 的更多信息。
| 归档时间: |
|
| 查看次数: |
8229 次 |
| 最近记录: |