聚集索引和非聚集索引之间有什么区别?

时间:2020-03-06 14:20:49  来源:igfitidea点击:

"聚集"索引和"非聚集索引"之间有什么区别?

解决方案

聚簇索引物理上存储在表上。这意味着它们是最快的,并且每个表只能有一个聚集索引。

非聚集索引是分开存储的,我们可以根据需要存储任意数量的索引。

最好的选择是在最常用的唯一列(通常是PK)上设置聚簇索引。表中应该始终有一个精选的聚集索引,除非一个非常有说服力的原因–不能想到一个,但是,嘿,它可能在那里–因为不这样做。

聚集索引实际上描述了物理上将记录存储在磁盘上的顺序,因此,我们只能拥有一个的原因。

非聚集索引定义的逻辑顺序与磁盘上的物理顺序不匹配。

聚集索引

  • 每桌一张
  • 读取速度比非群集读取快,因为数据按索引顺序物理存储

非聚集索引

  • 每张桌子可使用多次
  • 插入和更新操作比聚集索引更快

这两种类型的索引将提高性能时与使用索引,但会减慢更新和插入操作字段选择数据。

由于插入和更新的速度较慢,因此应在通常为增量的字段(即Id或者Timestamp)上设置聚簇索引。

如果SQL Server的选择性高于95%,则通常只使用索引。

基本上,群集意味着表中的数据按该物理顺序排列。这就是为什么每个表只能有一个的原因。

未聚集表示它是"仅"逻辑顺序。

聚集索引本质上是索引列中数据的排序副本。

聚集索引的主要优点是,当查询(搜索)在索引中找到数据时,则不需要其他IO来检索该数据。

维护聚簇索引(尤其是在频繁更新的表中)的开销可能导致性能下降,因此,最好创建一个非聚簇索引。

优点:

聚集索引非常适合范围(例如,从my_table中选择*,其中my_key在@min和@max之间)

在某些情况下,如果我们使用orderby语句,则DBMS不必进行排序工作。

缺点:

聚集索引可能会降低插入速度,因为如果新键的顺序不正确,则在插入记录时必须修改记录的物理布局。

聚集索引对磁盘上的数据进行物理排序。这意味着索引不需要额外的数据,但是(显然)只能有一个聚集索引。使用聚簇索引访问数据最快。

所有其他索引都必须是非聚集的。非聚簇索引具有索引列中数据的重复副本,这些列保持有序,并带有指向实际数据行的指针(如果有聚簇索引,则指向聚簇索引)。这意味着通过非聚集索引访问数据必须经过一个间接层。但是,如果仅选择索引列中可用的数据,则可以直接从重复的索引数据中获取数据(这就是为什么只选择所需的列而不使用*的一个好主意)