Sql-Server-2008
有沒有一種簡單的方法來調試並找出查詢執行緩慢的原因?
我遇到了一個奇怪的問題。
我們有兩台數據庫伺服器,一台是開發伺服器,一台是生產伺服器。
兩者俱有相同的規格。
虛擬機 (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 分鐘!
非常感謝各位