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


当前回答

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

聚集索引的主要优点是,当查询(seek)在索引中定位数据时,不需要额外的IO来检索该数据。

维护聚集索引的开销,特别是在频繁更新的表中,可能会导致性能较差,因此最好创建非聚集索引。

其他回答

聚集索引

每张桌子只有一个 由于数据按索引顺序物理存储,因此读取速度比非集群更快

非聚类索引

每张表可以使用多次吗 插入和更新操作比聚集索引更快

当选择使用索引的字段的数据时,这两种类型的索引都将提高性能,但会降低更新和插入操作的速度。

由于插入和更新较慢,聚集索引应该设置在一个字段上,通常是增量的,即Id或时间戳。

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

优点:

聚集索引适用于范围(例如:select * from my_table where my_key在@min和@max之间)

在某些情况下,如果使用orderderby语句,DBMS将不需要做排序工作。

缺点:

聚集索引可能会减慢插入速度,因为如果新键不是按顺序排列的,那么在放入记录时必须修改记录的物理布局。

聚集索引

一个表只能有一个聚集索引。 通常在主键上进行。 聚集索引的叶节点包含数据页。

非聚簇索引

一个表只能有249个非聚集索引(直到sql version 2005的后续版本支持多达999个非聚集索引)。 通常在任意键上。 非聚集索引的叶节点不包含数据页。相反,叶节点包含索引行。

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

非聚集索引单独存储,您可以拥有任意数量的索引。

最好的选择是在最常用的唯一列上设置聚集索引,通常是PK。在表中应该始终有一个精心选择的聚集索引,除非有一个非常令人信服的理由——想不出一个,但是,嘿,可能有——不这样做。

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

All other indexes must be non-clustered. A non-clustered index has a duplicate of the data from the indexed columns kept ordered together with pointers to the actual data rows (pointers to the clustered index if there is one). This means that accessing data through a non-clustered index has to go through an extra layer of indirection. However if you select only the data that's available in the indexed columns you can get the data back directly from the duplicated index data (that's why it's a good idea to SELECT only the columns that you need and not use *)