gpt4 book ai didi

sql - 当现有索引包含新索引中的所有列时,为什么创建这个新索引会大大提高性能?

转载 作者:太空狗 更新时间:2023-10-30 01:51:00 24 4
gpt4 key购买 nike

我有 Log 和 LogItem 表;我正在编写一个查询以从两者中获取一些数据。有数千个Log,每个Log 最多可以有125 个LogItems

有问题的查询很复杂,所以我跳过它(如果有人认为它很重要,我可能会发布它),但是当我运行 SSMS 估计查询计划时,它告诉我一个新的非聚集索引可以提高性能到 100%。

Existing Index: Non-clustered
Key Colums (LogItem): ParentLogID, DateModified, Name, DatabaseModified

Query Plan Recommendation
CREATE NONCLUSTERED INDEX [LogReportIndex]
ON [dbo].[LogItem] ([ParentLogID],[DatabaseModified])

只是为了好玩,我创建了这个新索引并运行了查询,令我惊讶的是,我的查询现在运行大约需要 1 秒,而之前是 10 秒以上。

我假设我现有的索引会涵盖这个新查询,所以我的问题是为什么在我的新查询中使用的唯一列上创建新索引会提高性能?我是否应该为我的 where 子句中使用的每个唯一的列组合创建一个索引?

注意:我不认为这是因为 SQL Server 正在缓存我的结果,我在创建索引之前运行了大约 25-30 次查询,并且在创建索引之后一直花费 10-15 秒它现在一直是 ~1 或更少。

最佳答案

索引中列的顺序很重要。如果过滤需要索引中的第 1 列和第 4 列,则索引将无济于事。它仅在按前 N 个连续列过滤时才有用。

这是因为索引是一棵树。您无法有效地选择树中 column3 = something 的所有节点,因为它们分散在其他地方,属于 column1column2 的不同值。但是,如果您还知道 column1column2,那么在树中找到正确的分支就很容易了。

关于sql - 当现有索引包含新索引中的所有列时,为什么创建这个新索引会大大提高性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8565461/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com