優化SQL代碼如何優化這些代碼在SQL與臨時表
INSERT INTO #ActivePlayers ([PlayerId])
SELECT DISTINCT([OwnerSID]) [PlayerId]
FROM [WarehouseMgmt].[FactLoginTrans] FLT
JOIN [WarehouseMgmt].[DimPlayer] DP ON DP.[Id] = FLT.[OwnerSID]
WHERE [IsSystemUser]=0
AND [OwnerSID]>0
AND [WarehouseReports].[ConvertfromUTCtoTZ] (FLT.[LogonTime],@ZoneCode) BETWEEN DATEADD(month, -13, @Date) AND DATEADD(month, -1, @Date)
什麼爲[WarehouseReports].[ConvertfromUTCtoTZ] (FLT.[LogonTime],@ZoneCode) BETWEEN DATEADD(month, -13, @Date) AND DATEADD(month, -1, @Date)
最好的選擇,因爲這帶我一段時間,我在重複幾個SQL查詢,這條線。 如何把它放到臨時表中並在以後的查詢中使用它?
既然'@ ZoneCode'是一個常量,而不是將'FLT.LogonTime'傳遞給每行的函數,您可以傳遞常量'@ Date',從而只調用一次該函數?或者,如果您發佈了定義,則可以將該函數轉換爲內聯表值函數,該函數比標量函數執行得更好。 – GarethD
您可以替換表列上的ConvertFromUTCtoTZ以將DateAdd()值從TZ轉換爲UTC?在ConvertUTCToTZ(date1)和ConvertUtcToTZ(Date2)之間使用FLT.logonTime將使用Flt.LogonTime上的索引。 –