SQL执行计划高成本70%

时间:2013-07-17 04:37:51

标签: sql sql-server database clustered-index

我正在运行一个耗时2秒的查询,但它的性能会更好,所以我从SQL Managemenet Studio运行执行计划详细信息,然后找到了一个"步骤"在成本为70%的过程中。

enter image description here

然后,我右键单击该项目,我找到了一个选项,其中显示"缺少索引详细信息",在我点击之后,生成了带有推荐的查询:

/*
Missing Index Details from SQLQuery15.sql - (local).application_prod (appprod (58))
The Query Processor estimates that implementing the following index could improve the query cost by 68.8518%.
*/

/*
USE [application_prod]
GO
CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
ON [dbo].[cloud_document] ([isactivedocument])
INCLUDE ([objectuid])
GO
*/

所以我的问题是如果我执行查询会发生什么?是否会影响我的数据库,应用后是否有侧边或副作用?

非常感谢并提前感谢。

2 个答案:

答案 0 :(得分:2)

运行查询qill在指定的表上创建一个索引(cloud_document)。

这可以提高阅读性能并改善性能/查询时间。

它还会影响INSERT / UPDATE / DELETE语句的性能,因为在这些语句中需要维护索引。

决定使用索引,索引数量以及索引包含的内容更像是一门艺术而非精确科学。

索引,碎片整理和统计数据的实际情况可以自动化,但应该保留,直到您更好地了解索引是什么以及它们的作用。

我建议你开始阅读一些关于索引的文档。

可以从Stairway to SQL Server Indexes

开始

答案 1 :(得分:0)

字面意思是告诉你在table [dbo]。[cloud_document]的isactivedocument上构建索引,我假设你使用isactivedocument作为过滤表的条件,并选择列objectuid。像

这样的东西
select objectuid, ... from [dbo].[cloud_document] where isactivedocument = 0/1

请注意,“聚簇索引扫描(70%)”并不意味着它是聚簇索引的问题。这意味着你没有isactivedocument的索引,那么sql引擎必须扫描聚集索引才能找到你想要的东西。这就是它承受如此巨大压力的原因。在isactivedocument上创建索引后,再次检查该计划,您将看到该节点变为“索引搜索”,这是一种更快捷的方法来找出您想要的内容。

通常,如果您的数据库压力主要来自查询,则新索引不会对您的系统造成太大伤害。继续创建索引。但当然,您需要尽可能减少索引数量。