关于聚簇和非聚簇索引的 SQL 查询

17 Mar 2025 | 4 分钟阅读

索引

索引的创建过程可以使定义的表更快地返回所需数据。如果没有索引,SQL Server 必须搜索整个表才能找到您的数据。这类似于您通过查看目录来查找书中的内容,SQL Server 也会进行索引。就像表的索引使我们无需扫描整个数据库即可找到精确数据一样。SQL 中有两种索引。索引通过减少查询执行期间的磁盘访问次数来帮助提高数据库性能。它是一种数据结构方法,用于在数据库中快速定位和访问数据。

聚集索引

创建数据物理排序的索引类型称为聚集索引。如果您的 Stud_details 表以 ID_NO 作为主键,您自己创建的聚集索引将根据 ID_NO 对 Stud_details 数据进行排序。类似于字典,聚集索引没有独立的索引页,并且按字母顺序排序。对于聚集索引,使用有序文件。任何不是键的列都用于定义文件的顺序。很多时候,非主键列被用来生成对于所有行都不唯一的索引。在这种情况下,我们通常组合两个或多个列来创建一个唯一值,这将有助于快速访问条目。这种技术称为聚集索引。简单来说,索引是为具有共同特征的记录分组而创建的。

SQL 代码

输出

SQL queries on Clustered and Non-Clustered Indexes

如果我们想在不同的列上建立聚集索引,必须先删除主键才能删除之前的索引。请记住,当一列被指定为主键时,该列就成为表的聚集索引。在我们能够创建任何其他列作为聚集索引之前,我们必须先删除前面的列。

步骤:

注意:一个表中最多只能有一个聚集索引。

非聚集索引

非聚集索引是独立于表中存储的数据来重新排列一个或多个选定列的索引结构。为了提高聚集索引无法处理的常用查询的性能,才开发了非聚集索引。它类似于教科书,索引页独立地制作在书的开头。换句话说,非聚集索引仅为我们提供了一组指向数据实际存储位置的虚拟链接或连接。当我们物理存储数据时,此时其索引并不重要。数据存在于叶节点中。与聚集索引相比,它需要更长的时间,因为需要做更多的工作才能通过进一步跟踪指针来检索数据。当索引是聚集的时,数据就在索引前面。

SQL 代码

输出

SQL queries on Clustered and Non-Clustered Indexes

注意:我们可以使用以下语法在表中创建多个非聚集索引

聚集索引和非聚集索引之间的区别

  • 非聚集索引速度较慢,而聚集索引提供更快的数据访问。
  • 当索引是聚集的时,没有独立的索引存储;但是,当索引不是聚集的时,则有独立的索引存储。
  • 一个表中只能有一个聚集索引,但可以有一个或多个非聚集索引。