我对DB的接触有限,只是作为一个应用程序员使用过DB。我想知道 "聚类 "和 "非聚类索引 "的情况。 我在网上搜索了一下,我发现的是:
*聚类索引是一种特殊类型的索引,它以重新排序的方式 列表中的记录被物理地 存储。 因此,表只能有 一个聚类索引。集群索引的叶子结点 簇状索引的叶节点包含数据 页。非聚类索引是一种 特殊类型的索引,其中的 索引的逻辑顺序并不 与磁盘上的行的物理存储顺序 > 磁盘上的行。非集群索引的叶子节点 非群集索引的叶子节点并不包括 数据页。 相反,叶子 节点包含索引行。
谁能用简单的英语解释一下这个问题?
在聚类索引中,行在磁盘上的物理存储顺序与索引的顺序相同。因此,只能有一个聚类索引。
在非聚类索引中,有第二个列表,它有指向物理行的指针。你可以有很多非聚类索引,尽管每个新的索引都会增加写入新记录的时间。
如果你想找回所有的列,一般来说,从聚类索引中读取会更快。你不必先去找索引,然后再去找表。
如果需要重新排列数据,向有聚类索引的表中写入数据的速度会比较慢。
一个聚类索引意味着你告诉数据库在磁盘上存储相互接近的数值。这样做的好处是可以快速扫描/检索落入聚类索引值的某些范围的记录。
例如,你有两个表,客户和订单:
Customer
----------
ID
Name
Address
Order
----------
ID
CustomerID
Price
如果你希望快速检索一个特定客户的所有订单,你可能希望在订单表的"CustomerID"列上创建一个聚类索引。这样一来,具有相同CustomerID的记录将被物理存储在磁盘上,相互靠近(聚类),从而加快他们的检索速度。
P.S. CustomerID的索引显然不是唯一的,所以你要么需要添加第二个字段来"uniquify"索引,要么让数据库为你处理,但这是另一个故事。
关于多个索引。每个表只能有一个聚类索引,因为这定义了数据的物理排列方式。如果你想打个比方,想象一下一个有很多表的大房间。你可以把这些桌子摆成几行,也可以把它们拉到一起,形成一个大的会议桌,但不能同时用两种方式。一张表可以有其他的索引,它们就会指向聚类索引中的条目,而聚类索引最后会说在哪里找到实际数据。