【发布时间】:2019-11-01 21:57:07
【问题描述】:
我搜索了覆盖索引,发现:
“覆盖索引是一种特殊类型的复合索引,所有列都存在于索引中。”
我了解主要目的是让非聚集索引不查找聚集索引,而对于 SQL Server,我们可以在创建索引时使用 'INCLUDE' 列,因此 SQL Server 在叶级添加它们指数。所以不需要通过cluster-index查找。
但是我们有一个客户表(CustID,FirstName,City),它在 CustID 上有一个聚集索引。
如果我们在 FirstName 列上创建一个非聚集索引(称为 IX_FIRSTNAME),并将该列作为有效负载包含在索引的叶节点中并查询为:
select FirstName from Customers where FirstName Like 'T*';
那么在这种情况下,就不需要通过clustered Index查找了,那么IX_FIRSTNAME可以认为是覆盖索引吗?
或者它必须满足所有列的要求? 并且我们需要为所有三列创建一个非聚集索引来作为覆盖索引?
【问题讨论】:
-
为什么
Customers表是heap? -
@Mazhar ,我已编辑我的帖子以在 CustID 上添加聚集索引
标签: sql-server database indexing non-clustered-index