Sql-Server-2008

有沒有一種簡單的方法來調試並找出查詢執行緩慢的原因?

  • June 6, 2012

我遇到了一個奇怪的問題。

我們有兩台數據庫伺服器,一台是開發伺服器,一台是生產伺服器。

兩者俱有相同的規格。

虛擬機 (Hyper-V) Windows Server 2008 R2 64 位 SQL Server 2008 R2 64 位

如果我在我們的開發伺服器上執行完全相同的查詢,則需要 10 秒才能得到 10 個結果。生產伺服器中的相同查詢有時會花費 1:30 分鐘。

有沒有簡單的方法可以找到問題的根源?是否與索引、工作量有關?

這只是一個範例,查詢是動態生成的,由我們的 Web 應用程序使用,它會在高級搜尋菜單上生成查詢

編輯添加查詢

SELECT Client_Id, Project_Id, Person_Id, Membership_No, Family_Name,
      First_Name, Password, Company, Country_Name, EMail, Member_Type,
      Member_Type_Description, Member_Status, Member_Status_Description,
      Category, Member_Category_Description, Balance, Date_Registered 
FROM uvw_Members_Display 
WHERE Client_Id='EHA' 
 AND Project_Id='EHA' 
 AND ( Client_Id='EHA'
   AND Project_Id='EHA' 
   AND (  (( uvw_Members_Display.Member_Type LIKE '01' ))
       OR ( uvw_Members_Display.Member_Type LIKE '02' )
       OR ( uvw_Members_Display.Member_Type LIKE '03' )
       OR ( uvw_Members_Display.Member_Type LIKE '04' )
       )
   AND ( uvw_Members_Display.Member_Status LIKE 'I' )
   AND ( Balance =0 )
   AND ( uvw_Members_Display.Category LIKE '02' ) 
   AND Date_Registered IS NOT NULL 
     ) 
ORDER BY Person_Id DESC

感謝先生!您的評論為我指明了正確的方向!

我已將查詢粘貼到 SQL Management Studio

然後使用選項顯示估計的執行計劃

這給了我一個輸出,需要重新創建屬於該視圖的一個表中的索引,因此我刪除了它並使用建議的輸出從頭開始創建它。

CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
ON [dbo].[MemberOrders] ([Client_Id],[Project_Id],[Person_Id])

現在查詢只需要 2 秒,而不是以前的 1:30 分鐘!

非常感謝各位

引用自:https://dba.stackexchange.com/questions/18680