【发布时间】:2015-02-27 22:21:37
【问题描述】:
对于 db 中的每一行,我需要计算 2 天之间的工作日数。所以我创建了一个函数,它接受 2 个日期参数,连接到日期维度并计算输入时间段之间的工作日数。这很好用,因为它必须对每一行进行计算,所以它很慢。
只是为了比较,如果我只从表中选择随机列(不包括循环时间计算),那么速度是几秒钟内 100 万行。 如果我包括使用 sql 函数的 CycleTime 计算,则速度为每 10 秒 15k 行。 100 万行总共需要 10 分钟。
这里是查询
SELECT
CycleTime =
CASE WHEN DateStarted is not null and DateCompleted is not null
THEN DM.dbo.ufnCalculateWorkingDays(DateStarted, DateCompleted)
ELSE NULL
END
from MyTable
及功能:
CREATE FUNCTION [dbo].[ufnCalculateWorkingDays]
(
@StartDate date,
@EndDate date
)
RETURNS int
AS
BEGIN
DECLARE @WorkingDays int;
WITH CTE AS
(
select WorkingDay = Date
from DimDate
where
Date between @StartDate and @EndDate
AND IsHolidayUSA = 0
AND IsWeekday = 1
)
Select @WorkingDays = COUNT(*) from CTE
RETURN @WorkingDays;
END
有没有其他方法可以加快查询速度?
【问题讨论】:
标签: sql performance function ssis