执行计划建议在不属于 where 子句的列上添加索引
execution plan suggesting to add an index on columns which are not part of where clause
我正在 运行 跟踪 SSMS 中的查询和执行计划,建议在不属于 where 子句的列上添加索引。我计划在 where 子句(OID 和 TransactionDate)中使用的两个列上添加索引。
SELECT
[OID] , //this is not a PK. Primary key column is not a part of sql script
[CustomerNum] ,
[Amount] ,
[TransactionDate] ,
[CreatedDate]
FROM [dbo].[Transaction]
WHERE OID = 489
AND TransactionDate > '01/01/2018 06:13:06.46';
索引建议
CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
ON [dbo].[Transaction] ([OID],[TransactionDate])
INCLUDE ([CustomerNum],[Amount],[CreatedDate])
已更新
我需要包括其他列吗?正在使用 .net 中的 SQLBulkCopy class 通过后端进程将数据导入 table。我想知道在所有列上使用非聚簇索引是否会降低性能。 (在我的 table 中,Pk 列称为 TransactionID,它不是必需的,但我在 table 中有这个,以防将来需要它,否则 SQLBulkCopy 可以更好地处理堆。其他选项是删除并重新创建索引SQLBulkCopy 操作前后)
INCLUDE
关键字指定要添加到非聚集索引的叶级别的非键列。
这意味着如果您将添加此索引并运行再次查询,SQL服务器可以从索引中获取所需的所有信息,从而无需在table 还有。
作为一般经验法则 - 当 SSMS 建议索引时,创建它。如果它没有帮助,您可以稍后将其删除。
您不需要在非聚集索引中添加所有 table 列,建议的索引适用于提供的查询。 SQL 服务器数据库引擎建议通常都很好。
需要 INCLUDE 关键字来避免 KEY LOOKUP 并使用 NONCLUSTERED INDEX SEEK。
总而言之:聚集索引扫描中没有 NONCLUSTERED INDEX 结果
创建的 NONCLUSTERED INDEX 没有包含列导致 NONCLUSTERED INDEX 扫描加键查找。
创建了包含列的 NONCLUSTERED INDEX 导致 NONCLUSTERED INDEX SEEK。
我正在 运行 跟踪 SSMS 中的查询和执行计划,建议在不属于 where 子句的列上添加索引。我计划在 where 子句(OID 和 TransactionDate)中使用的两个列上添加索引。
SELECT
[OID] , //this is not a PK. Primary key column is not a part of sql script
[CustomerNum] ,
[Amount] ,
[TransactionDate] ,
[CreatedDate]
FROM [dbo].[Transaction]
WHERE OID = 489
AND TransactionDate > '01/01/2018 06:13:06.46';
索引建议
CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
ON [dbo].[Transaction] ([OID],[TransactionDate])
INCLUDE ([CustomerNum],[Amount],[CreatedDate])
已更新
我需要包括其他列吗?正在使用 .net 中的 SQLBulkCopy class 通过后端进程将数据导入 table。我想知道在所有列上使用非聚簇索引是否会降低性能。 (在我的 table 中,Pk 列称为 TransactionID,它不是必需的,但我在 table 中有这个,以防将来需要它,否则 SQLBulkCopy 可以更好地处理堆。其他选项是删除并重新创建索引SQLBulkCopy 操作前后)
INCLUDE
关键字指定要添加到非聚集索引的叶级别的非键列。
这意味着如果您将添加此索引并运行再次查询,SQL服务器可以从索引中获取所需的所有信息,从而无需在table 还有。
作为一般经验法则 - 当 SSMS 建议索引时,创建它。如果它没有帮助,您可以稍后将其删除。
您不需要在非聚集索引中添加所有 table 列,建议的索引适用于提供的查询。 SQL 服务器数据库引擎建议通常都很好。
需要 INCLUDE 关键字来避免 KEY LOOKUP 并使用 NONCLUSTERED INDEX SEEK。
总而言之:聚集索引扫描中没有 NONCLUSTERED INDEX 结果
创建的 NONCLUSTERED INDEX 没有包含列导致 NONCLUSTERED INDEX 扫描加键查找。
创建了包含列的 NONCLUSTERED INDEX 导致 NONCLUSTERED INDEX SEEK。