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


当前回答

优点:

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

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

缺点:

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

其他回答

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

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

你可能已经阅读了以上文章中的理论部分:

-聚类索引,我们可以看到直接指向记录,即它的直接,所以它需要更少的时间进行搜索。此外,它不会占用任何额外的内存/空间来存储索引

而在非聚集索引中,它间接指向聚集索引,然后它将访问实际的记录,由于它的间接性质,它将花费更多的时间来访问。此外,它需要自己的内存/空间来存储索引

优点:

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

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

缺点:

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

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

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 *)

聚类基本上意味着数据在表中的物理顺序。这就是为什么每个表只能有一个。

非聚集意味着它“只是”一个逻辑顺序。