【问题标题】:Missing Index Details SQL缺少索引详细信息 SQL
【发布时间】:2012-09-07 14:58:13
【问题描述】:

我正在调整我的 SQL 服务器,当我在顶部显示我的一个查询的执行计划时,它显示:

“缺失索引(影响 99.7782):创建非聚集索引...”

所以我查看了缺少的索引详细信息,它显示了这一点:

/*
Missing Index Details from ExecutionPlan1.sqlplan
The Query Processor estimates that implementing the following index could improve the query cost by 99.7782%.
*/

/*
USE [phsprod]
GO
CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
ON [dbo].[address] ([userid])

GO
*/

我现在只使用 SQL 大约一个月,而且我从来没有做过任何事情,因为我的所有表都已经为我构建了。任何人都可以帮助解释/给我关于如何处理的任何想法吗?谢谢。

【问题讨论】:

  • 请注意,当表的内容被修改(添加、删除、更新)时,索引以很小的时间成本(由系统维护)减少了处理查询所花费的时间,并且不一定很小磁盘空间成本,加上在需要考虑更多索引时分析查询计划所花费的额外时间通常无法衡量的成本。综合来看,指标不错;太多的索引可能是一个问题。谨慎添加它们。

标签: sql performance indexing


【解决方案1】:

这意味着 SQL Server 建议您的查询可以使用索引运行得更快。索引会增加开销和磁盘存储,因此您应该忽略此提示,除非查询在生产中出现性能问题。

要创建索引,请取消注释use之后的语句,将[&lt;Name of Missing Index, sysname,&gt;]替换为真实姓名,然后运行:

USE [phsprod]
GO
CREATE NONCLUSTERED INDEX IX_Address_UserId
ON [dbo].[address] ([userid])

【讨论】:

  • +1,尽管我认为应该对索引建议持保留态度。它们应该由集中管理架构并理解所有查询而不仅仅是这个查询的人应用。
【解决方案2】:

这意味着 SQL Server 建议您的查询可以使用此索引运行得更快。

这可能意味着您当前的索引对于您正在运行的查询来说不是最大的。也许您的查询可以优化。或者,也许您可​​以添加索引。但是如果你决定这样做,你必须仔细分析。

确实,索引会增加开销和磁盘存储。但是,它也可以提高性能。 例如,如果您总是根据“用户 ID”在表中进行搜索,那么在该列上添加索引可能会有所回报,因为 SQL 将能够使用该索引进行搜索。

如果您在字典中搜索一个单词,请稍微考虑一下。 如果您要查找单词“dog”,您将搜索“d”,然后搜索以“do”开头的单词,最终找到单词“dog”。

如果字典中的单词不是按字母顺序排列的,则必须搜索整个字典才能找到单词“dog”!

聚集索引(或主键)是列的顺序。 现在,您似乎在“userid”列上没有索引。所以 SQL Server 必须(可能)扫描整个表,直到找到用户 ID。

如果你添加一个非聚集索引,它不会重新排序你的表,但它会告诉 SQL Server 他应该在哪个范围内搜索以找到你想要的用户 ID。 (如“在字典中,在第 20 页和第 30 页之间”)所以它不必搜索整个表来找到它。

但这也意味着当你向表中添加新数据,或者删除,或者修改时,他需要保持他的索引是最新的。通常,一些索引不会受到伤害,但您需要确保它们是必需的。您不想添加太多索引,因为如果添加太多,它们会影响性能。

如果你的表只包含几百行,也许它不会显示你的性能有很大的提高。但随着时间的推移,当你的桌子变大时,它可能会有所作为。

希望有帮助!

【讨论】:

  • 在我的工作中,我们有非常古老的数据库,几乎没有索引。在我们的数据库中添加索引(最多可以有 100 个甚至更多,有数百个表,有时超过一百万行)确实有助于提高性能。
  • 您应该尝试在使用和不使用新索引的情况下运行一些查询,以查看性能差异。您还可以显示执行计划,看看新索引是否更好。此外,您应该检查应用程序对该表执行的其他查询。验证它是否也改善了其他查询,或者至少不会降低其他查询的性能。
猜你喜欢
  • 2012-05-13
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多