我在處理方面遇到了問題,並且在保持其準確性的同時提高了查詢效率。在我顯示查詢之前,我想指出一些基本知識。減少SQL查詢的執行時間
我有一個案例,操縱where
條款 - 獲取父母的所有孩子。基本上我有兩種類型的數據需要顯示;紅色和綠色類型。紅色類型的列(TRK_TrackerGroup_LKID2
)默認設置爲NULL
,而綠色數據在所述列中有一個值(範圍從5-7)。
我的問題是,我需要提取兩種類型的數據準確地得到突出問題計數的觀點,但這樣做(加入的情況下)的執行時間的推移,從<1秒遠遠超過15秒。
這是查詢(與提到的情況):
SELECT TS.id AS TrackerStartDateID,
TSM.mappingtypeid,
TSM.maptoid,
TFLK.trk_trackergroup_lkid,
Count(TF.id) AS Cnt
FROM [dbo].[trk_startdate] TS
INNER JOIN [dbo].[trk_startdatemap] TSM
ON TS.id = TSM.trk_startdateid
AND TSM.deletedflag = 0
INNER JOIN [dbo].[trk_trackerfeatures] TF
ON TF.trk_startdateid = TS.id
AND TF.deletedflag = 0
INNER JOIN [dbo].[trk_trackerfeatures_lk] TFLK
ON TFLK.id = TF.trk_feature_lkid
WHERE TS.deletedflag = 0
AND TF.applicabletoproject = 1
AND TF.readyforwork = CASE -- HERE IS THE PROBLEM
WHEN TF.trk_trackerstatus_lkid2 IS NULL THEN 0
ELSE 1
END
AND TF.datestamp = (SELECT Max(TF2.datestamp)
FROM [dbo].[trk_trackerfeatures] TF2
INNER JOIN [dbo].[trk_trackerfeatures_lk] TFLK2
ON TFLK2.id = TF2.trk_feature_lkid
WHERE TF.trk_startdateid = TF2.trk_startdateid
AND TFLK2.trk_trackergroup_lkid = TFLK.trk_trackergroup_lkid)
GROUP BY TS.id,
TSM.mappingtypeid,
TSM.maptoid,
TFLK.trk_trackergroup_lkid,
TF.datestamp
它用作在意義上的「父」,它抓住最新插入的(使用日期戳)從每一個兒童安全數據集組。這對於在稍後的SSRS報告中生成父報告是必要的,但目前我的問題(如上所述)是執行時間。
我想聽聽是否有任何關於如何減少執行時間,同時保持查詢的準確性的建議。
預期輸出:
沒有的情況下我得到這個:
'和TF。readyforwork = CASE'是這個問題的情況嗎? –
確實。我試圖大膽地說明問題是什麼,但似乎代碼標記覆蓋了任何字體樣式。 – geostocker
你能提供[樣本輸入和期望輸出](http://stackoverflow.com/help/mcve)嗎? –