25

我正在调整我的 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 大约一个月,而且我从来没有做过任何事情,因为我的所有表都已经为我构建了。任何人都可以帮助解释/给我关于如何处理的任何想法吗?谢谢。

4

2 回答 2

27

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

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

USE [phsprod]
GO
CREATE NONCLUSTERED INDEX IX_Address_UserId
ON [dbo].[address] ([userid])
于 2012-09-14T12:34:24.953 回答
18

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

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

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

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

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

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

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

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

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

希望有帮助!

于 2012-09-14T12:42:46.213 回答