缺少索引详细信息SQL

Mat*_*t P 22 sql indexing performance details

我正在调整我的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
*/
Run Code Online (Sandbox Code Playgroud)

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

And*_*mar 24

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

要创建索引,请取消注释后面的语句use,替换[<Name of Missing Index, sysname,>]为真实名称,然后运行它:

USE [phsprod]
GO
CREATE NONCLUSTERED INDEX IX_Address_UserId
ON [dbo].[address] ([userid])
Run Code Online (Sandbox Code Playgroud)

  • +1,虽然我会说索引建议应该采取一些盐.它们应该由集中管理模式并且理解*所有*查询而不仅仅是这个查询的人来应用. (4认同)

Dan*_*vey 17

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

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

实际上,索引会增加开销和磁盘存储.但是,它也可以提高性能.例如,如果您总是根据"用户ID"在表中搜索,那么也许它可以在该列上添加索引,因为SQL将能够搜索该索引.

如果您在词典中搜索单词,请考虑一下这一点.如果您正在寻找"狗"这个词,那么您将搜索"d",然后搜索以"do"开头的单词,最后找到"dog"这个词.

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

聚簇索引(或主键)是列的顺序.现在,您似乎没有"userid"列上的索引.因此,SQL Server(可能)扫描整个表,直到找到用户ID.

如果添加非聚簇索引,它将不会重新排序您的表,但它会告诉SQL Server他应搜索哪个范围以查找您想要的用户ID.(就像"在dictionnary中,在第20页和第30页之间")所以它不必搜索整个表来找到它.

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

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

希望有所帮助!

  • 您应尝试使用和不使用新索引运行某些查询以查看性能差异.您还可以显示执行计划,以查看新索引是否更好.此外,您应该检查该应用程序在该表上执行的其他查询.验证它确实改进了其他查询,或者至少,它不会恶化其他查询的性能. (4认同)
  • 在我的工作中,我们拥有非常旧的数据库,几乎没有索引。在我们的数据库(可能有 100 个甚至更多,有数百个表,有时超过一百万行)上添加索引确实有助于提高性能。 (2认同)