缺少索引详细信息SQL

时间:2012-09-14 12:29:16

标签: 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
*/

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

2 个答案:

答案 0 :(得分:23)

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

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

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

答案 1 :(得分:16)

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

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

实际上,索引会增加开销和磁盘存储。但是,它也可以提高性能。 例如,如果你总是根据“userid”在你的表中搜索,那么也许它可以在该列上添加一个索引,因为SQL将能够搜索这个索引。

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

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

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

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

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

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

希望有所帮助!