📅  最后修改于: 2023-12-03 15:27:41.833000             🧑  作者: Mango
在关系型数据库中,索引是提高查询效率的重要组成部分。聚集索引和非聚集索引是其中两种基本的索引类型。
聚集索引的表格中数据按照索引的顺序进行存储。因此,每个表只能有一个聚集索引。
使用聚集索引可以提高查询的性能,并降低排序操作的成本。在聚集索引上进行的查询是最快的。
使用 CREATE CLUSTERED INDEX
命令可以在表格上创建一个聚集索引。例如,以下命令可以在 Customers
表格的 CustomerId
列上创建一个聚集索引:
CREATE CLUSTERED INDEX idx_CustomerId ON Customers (CustomerId);
在聚集索引上进行查询可以获得最快的查询结果。例如,以下命令可以在 Customers
表格上查询 CustomerId
为 10 的行:
SELECT * FROM Customers WHERE CustomerId = 10;
聚集索引不适用于所有数据类型。在某些情况下,聚集索引可能不是最优的。
非聚集索引是指数据存储在索引之外,所以它可以有多个。通常,非聚集索引用于表格中经常使用的列。
使用非聚集索引时,查询将在索引上进行,然后将查询结果合并到一起。
使用 CREATE INDEX
命令可以在表格上创建一个非聚集索引。例如,以下命令可以在 Customers
表格的 CustomerName
列上创建一个非聚集索引:
CREATE INDEX idx_CustomerName ON Customers (CustomerName);
在非聚集索引上进行查询会比在表格上进行查询更快。例如,以下命令可以在 Customers
表格上查询 CustomerName
为 “John” 的行:
SELECT * FROM Customers WHERE CustomerName = 'John';
非聚集索引不能直接返回查询结果。当创建非聚集索引时,需要在索引上包含查询需要的列。否则,在查询时需要返回索引列和表格列,这会造成额外的开销。
聚集索引和非聚集索引都是提高查询效率的有效手段。程序员可以根据实际情况选择使用哪种索引,以提高查询性能和降低查询成本。