功能:
create function .[data_by_date_district](@rev_datetime datetime)
returns table
as
return
(
SELECT
ro.Region,[DATETIME],
sum(datain) 'datain',
sum(dataout) 'dataout'
FROM
data.inoutdata cr
join
structure.site ro on
ro.site = substring(replace([siteunqid],'**',''),1,LEN(siteunqid)-1)
where [DATETIME] =@rev_datetime
group by Region,[DATETIME]
);
任何日期执行此功能需要00:00:00。
现在当我加入另一张桌子时需要4秒(此表为75行):
SELECT
Region,[DATETIME],datain,dataout,(cr.datain+cr.dataout) 'total',SP_GEOMETRY,MI_STYLE,MI_PRINX
FROM
data.data_by_date_district(DATEADD(DAY,-1,cast(GETDATE() as DATE)) ) cr
join
datamap.VectorMaps.REGION_BND db
on db.Name = cr.Region
第一个表有1,700,000行数据,每天增加170,000,但其他表只有75行。有什么方法可以减少查询时间吗?函数的结果是75行。
答案 0 :(得分:3)
我认为您应该使用公共表表达式而不是函数来获取结果集并通过cte in from子句替换函数。我希望这有帮助!
答案 1 :(得分:2)
您是否尝试在查询中直接使用函数体(替换函数调用)?我认为功能对性能不是很好。
类似的东西(对不起,格式化不是最好的):
SELECT Region,
[DATETIME],
datain,
dataout,
(cr.datain + cr.dataout) 'total',
SP_GEOMETRY,
MI_STYLE,
MI_PRINX
FROM (
SELECT ro.Region,
[DATETIME],
SUM(datain) 'datain',
SUM(dataout) 'dataout'
FROM data.inoutdata cr
JOIN structure.site ro ON ro.site = SUBSTRING(REPLACE([siteunqid], '**', ''), 1, LEN(siteunqid) - 1)
WHERE [DATETIME] = DATEADD(DAY, -1, CAST(GETDATE() AS DATE))
GROUP BY Region,
[DATETIME]
) cr
JOIN datamap.VectorMaps.REGION_BND db ON db.Name = cr.Region