我正在使用2型数据仓库,目前正在研究一种功能,以尝试为某些用户模拟数据立方体,以从特定快照中快速提取数据。
目前,我可以通过转换联接(或where子句)上的参数来修改代码以使其工作,但是这会导致100,000条记录的性能降低3秒。
出于性能考虑,可以执行
set @AsAt = dbo.AdjustLocalToUtc(@AsAt)
在return语句之前的某个位置,或者可能在开始时。
代码块-如果已通过UTC值,则可以使用
ALTER FUNCTION dbo.fn_Ticket_AsAt
(
@AsAt datetime --Local Time for User Confort
)
RETURNS TABLE
AS
RETURN
(
Select *
from dvr.hub_ticket hub
join dvr.sat_ticket sat
on hub.hub_ticket_sk = sat.hub_ticket_sk
and @AsAt between sat.load_datetime and coalesce(sat.load_end_datetime,getutcdate())
--Load_datetime and load_end_datetime are UTC values
)
查询的期望形式是什么,因为转换仅需要执行一次,而无需为每个记录执行一次。
ALTER FUNCTION dbo.fn_Ticket_AsAt
(
@AsAt datetime --Local Time for User Confort
, declare @dv datetime = dbo.AdjustLocaltoUtc(@AsAt)
)
RETURNS TABLE
AS
RETURN
(
Select *
from dvr.hub_ticket hub
join dvr.sat_ticket sat
on hub.hub_ticket_sk = sat.hub_ticket_sk
and @dv between sat.load_datetime and coalesce(sat.load_end_datetime,getutcdate())
--Load_datetime and load_end_datetime are UTC values
)