我有一系列的視圖,我創建了一堆不同的報告。他們互相建立起一個最終視圖,返回少於5k條記錄。當我打開這個視圖時,運行時間不到一秒鐘。如果我添加一個WHERE collumn IS NOT NULL
它需要2分鐘。雖然這對報告沒有問題,但我不需要經常運行,但還有其他一些我必須每週運行一次,每天運行一次,有時候更頻繁。查看TSQL查詢需要很長時間
我的解決方案是創建一個存儲過程,從視圖的數據中創建一個表並查詢它。我將存儲過程設置爲在計劃報告自動啓動之前運行。這工作正常,但我必須手動運行存儲過程手動每次我想要獲取更新的報告。
有沒有更好的方法?
查看[MW_Submitted_ROY]查找提交的周財務報表。該視圖將活動表與靜態表中的歷史數據組合在一起。我將靜態表格中的數據按照與活動表格相同的格式進行處理。
SELECT oe_po_no, cus_no, user_def_fld_1, user_def_fld_2, tot_sls_amt
FROM MW_Submitted_Weeks_OldMacola
WHERE MW_Submitted_Weeks_OldMacola.oe_po_no LIKE 'adv%'
UNION
SELECT oe_po_no, cus_no, user_def_fld_1, user_def_fld_2, tot_sls_amt
FROM oehdrhst_sql
WHERE oehdrhst_sql.oe_po_no LIKE 'adv%'
查看[MW_Company_Weeks]生成每家公司都可能幾個星期,他們將提交財務當前和前一年。
SELECT MW.MW_Weeks.Year, MW.MW_Weeks.Week, MW.MW_CompanyCodes.cmp_code
FROM MW.MW_Weeks CROSS JOIN
MW.MW_CompanyCodes
WHERE (MW.MW_Weeks.WEDate <= GETDATE()) AND (MW.MW_Weeks.Year > YEAR(GETDATE()) - 2)
查看[MW_Submitted_Weeks_By_RBC_ROY]結合更多信息有關該公司的,我需要生成報表
SELECT dbo.cicmpy.textfield2 AS [Group], dbo.cicmpy.cmp_code, dbo.cicmpy.cmp_name, dbo.cicmpy.cmp_fadd3 AS Owner, dbo.cicmpy.SalesPersonNumber,
MW.MW_Submitted_ROY.user_def_fld_1 AS Year, MW.MW_Submitted_ROY.user_def_fld_2 AS Week, MW.MW_Submitted_ROY.oe_po_no AS Description,
MW.MW_Submitted_ROY.tot_sls_amt
FROM dbo.cicmpy INNER JOIN
MW.MW_Submitted_ROY ON dbo.cicmpy.cmp_code = MW.MW_Submitted_ROY.cus_no
WHERE (dbo.cicmpy.cmp_code LIKE 'C%') AND (dbo.cicmpy.cmp_status = 'a') AND (dbo.cicmpy.cmp_type = 'C')
這給我們帶來最終的查看[MW_Missing_Weeks]這說明我這周的缺失,和值前一年提交了財務報表。這是添加'不爲空'的地方,這使得它永遠。
SELECT MW.MW_Company_Weeks.Year, MW.MW_Company_Weeks.Week, MW.MW_Company_Weeks.cmp_code, bPrev.tot_sls_amt, bPrev.[Group], bPrev.cmp_name, bPrev.Owner,
bPrev.SalesPersonNumber, bPrev.Description
FROM MW.MW_Company_Weeks LEFT OUTER JOIN
MW.MW_Submitted_Weeks_By_RBC_ROY ON MW.MW_Company_Weeks.cmp_code = MW.MW_Submitted_Weeks_By_RBC_ROY.cmp_code AND
MW.MW_Company_Weeks.Year = MW.MW_Submitted_Weeks_By_RBC_ROY.Year AND MW.MW_Company_Weeks.Week = MW.MW_Submitted_Weeks_By_RBC_ROY.Week LEFT OUTER JOIN
MW.MW_Submitted_Weeks_By_RBC_ROY AS bPrev ON MW.MW_Company_Weeks.cmp_code = bPrev.cmp_code AND MW.MW_Company_Weeks.Year = bPrev.Year + 1 AND
MW.MW_Company_Weeks.Week = bPrev.Week
WHERE (MW.MW_Submitted_Weeks_By_RBC_ROY.cmp_code IS NULL) AND bPrev.tot_sls_amt IS NOT NULL
http://technet.microsoft.com/en-us/library/dd171921(v=sql.100).aspx – seekerOfKnowledge
如果不知道更多關於表結構,索引等的具體建議,真的很難做出。可以看一下執行計劃,看看發生減速的位置,看看索引可能在不存在的情況下可以提供哪些幫助。聽起來像「..不空」正在引發一些大表掃描,放慢東西... –
@DavidW這些是我從來沒有搞錯過的東西。你想讓我包含執行計劃xml嗎?這很大。 – d90