You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用HolyCount函数处理70万行数据速度过慢,寻求优化方案

优化HolyCount函数的性能问题

原函数运行极慢的核心原因有三点:

  • 逐天循环遍历日期范围,日期跨度大时循环次数会指数级增长,70万行调用相当于重复执行几十万次循环操作
  • 每次循环都执行一次子查询,重复扫描全表,完全没有复用查询结果
  • 未针对查询条件建立索引,每次子查询都是低效的全表扫描

直接用集合操作替代循环,一次性计算日期范围内的节假日数量,性能会提升几个数量级:

ALTER FUNCTION [dbo].[HolyCount] 
(
    @StartTime datetime,
    @EndTime datetime
)
RETURNS int 
AS
BEGIN
    RETURN (
        SELECT COUNT(*)
        FROM [StageArea_Tickets].[dbo].[SW_Calendar]
        WHERE [shamsi_state] = 'holiday'
          AND CAST([georgian_date] AS date) BETWEEN CAST(@StartTime AS date) AND CAST(@EndTime AS date)
    )
END

额外优化建议:

  • 给[StageArea_Tickets].[dbo].[SW_Calendar]表建立复合索引:CREATE NONCLUSTERED INDEX IX_SW_Calendar_HolidayDate ON SW_Calendar (shamsi_state, georgian_date),这会让查询直接命中索引,彻底避免全表扫描
  • 如果georgian_date字段本身就是date类型,可以去掉CAST转换,进一步减少计算开销

内容的提问来源于stack exchange,提问作者Adel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 12:59:54