📜  聚集和非聚集索引上的 SQL 查询(1)

📅  最后修改于: 2023-12-03 15:27:41.833000             🧑  作者: Mango

聚集和非聚集索引上的 SQL 查询

在关系型数据库中,索引是提高查询效率的重要组成部分。聚集索引和非聚集索引是其中两种基本的索引类型。

聚集索引

聚集索引的表格中数据按照索引的顺序进行存储。因此,每个表只能有一个聚集索引。

使用聚集索引可以提高查询的性能,并降低排序操作的成本。在聚集索引上进行的查询是最快的。

创建聚集索引

使用 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';
非聚集索引的限制

非聚集索引不能直接返回查询结果。当创建非聚集索引时,需要在索引上包含查询需要的列。否则,在查询时需要返回索引列和表格列,这会造成额外的开销。

结论

聚集索引和非聚集索引都是提高查询效率的有效手段。程序员可以根据实际情况选择使用哪种索引,以提高查询性能和降低查询成本。