有人能告诉我 SQL Server 中非聚集索引的用途是什么吗?据我所知,聚集索引和非聚集索引都可以使搜索变得更容易。
有人能告诉我 SQL Server 中非聚集索引的用途是什么吗?据我所知,聚集索引和非聚集索引都可以使搜索变得更容易。
一个用途是在表上只能有一个聚集索引。如果你需要多于一个,则其余的必须是非聚集索引。
聚集索引包含每一行的所有数据,而非聚集索引通常较小,因为您只有键、指针和可选的包含列。您也可以拥有任意多个非聚集索引。
就它们返回数据的方式而言,它们非常相似,特别是如果您从未必须在聚集索引上执行查找操作。能够从非聚集索引中获取所需内容的查询被称为“覆盖”(即所有所需内容都由非聚集索引覆盖)。此外,由于聚集索引是物理数据的线性排序,因此基于范围的查询更快,因为它可以通过使用从聚集索引开始的偏移量来找到范围的起点和终点。
聚集索引是指每个表的每一行数据在磁盘上的物理存储方式(每个表只能有一个此类型的索引),因此所有写操作的性能都基于该索引。如果您必须重建此索引或在此索引上移动内容,则可能非常昂贵。
非聚集索引仅是按不同顺序列出行的特定部分(每个表可以有多个此类型的索引),并指向其实际存储位置的指针。非聚集索引用于在您只知道某些行信息时轻松查找特定行。
如果您将传统教科书视为数据库表,则聚集索引是该书实际内容页的集合,因为按照逻辑顺序编写这些页面是有意义的。非聚集索引是书后索引,按字母顺序列出重要术语。它仅列出您要查找的单词和页码,使您在查找特定术语时可以轻松找到需要阅读的内容。
通常,将聚集索引设置为遵循NUSE原则(窄、唯一、静态、递增)的ID是一个好主意。通常情况下,您可以使用SMALLINT、INT或BIGINT来实现这一点,具体取决于您想在表中存储的数据量。这样可以给您一个窄键,因为它们只有2、4或8个字节宽(分别),您还可能希望为该列设置IDENTITY属性,以便自动递增。如果您从不更改此行的值(使其静态)--通常没有理由这样做--那么它将是唯一的和递增的。这样,当您插入新行时,它只会将其放在磁盘上的下一个可用位置。这可以提高写入速度。