2013-07-17 75 views
1

我正在運行一個需要2秒鐘的查詢,但它應該執行得更好,所以我從SQL Managemenet Studio運行執行計劃詳細信息,並且發現成本爲「步驟」 70%。SQL執行計劃高成本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 
*/ 

所以我的問題是如果我執行查詢會發生什麼?它是否會影響我的數據庫,應用後是否有任何反作用或副作用?

非常感謝,並提前感謝。

+0

如果可以,您應該以XML格式發佈整個執行計劃(右鍵單擊執行計劃>另存爲XML ...)。我們需要了解正在發生的事情的全貌。 –

回答

0

的字面意思是告訴你在表[DBO]的isactivedocument建立索引。[cloud_document],從中我假設你正在使用isactivedocument作爲條件來過濾表,並選擇objectuid列。類似於

select objectuid, ... from [dbo].[cloud_document] where isactivedocument = 0/1 

請注意,「聚集索引掃描(70%)」並不意味着它是聚簇索引的問題。這意味着你沒有索引isactivedocument,那麼sql引擎必須掃描聚集索引才能找到你想要的。這就是爲什麼它承受着這麼大的壓力。一旦你在isactivedocument上創建了索引,再次檢查這個計劃,你會發現這個節點變成了「索引查找」,這是找出你想要的更快的方法。

通常,如果您的數據庫壓力主要來自查詢,新索引對您的系統沒有太大的損害。只需繼續並創建索引即可。但是,您當然需要儘可能減少索引數量。

2

運行查詢qill在指定的表上創建一個索引(cloud_document)。

這應該會提高閱讀性能並改善性能/查詢時間。

它也會影響INSERT/UPDATE/DELETE語句的性能,因爲在這些語句期間需要維護索引。

使用索引的決定,索引的數量和索引的組成是更精確的藝術。

索引,碎片整理和統計信息的實際維護是可以自動執行的,但應該保留,直到您更好地理解索引是什麼以及它們的功能爲止。

我會推薦你​​閱讀一些關於索引的文檔。

可以開始與Stairway to SQL Server Indexes

+0

所以你覺得有什麼好做的?那之後我還得做任何維修嗎?非常感謝@astander – VAAA