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

SQL中基于起止年月查询Date类型字段的高效方案求助

优化日期范围查询以提升性能

你当前的查询性能低下,核心原因是对IH_Date列使用了YEAR()和MONTH()函数进行运算——这种写法会让数据库无法利用该列上的索引,只能执行全表扫描,数据量越大速度越慢。

下面是两种更高效的优化方案:

方案一:直接指定日期范围(手动计算月末)

把起止年月转换成具体的日期区间,直接和IH_Date做比较,数据库可以直接使用索引:

SELECT *
FROM tbl_item_history IH
WHERE IH.IH_Date >= '2022-03-01'
  AND IH.IH_Date <= '2023-02-28'
ORDER BY IH.IH_DATE ASC

方案二:自动计算月末日期(通用型写法)

如果不想手动计算每个月的最后一天,可以用日期函数生成下一个月的第一天,然后用<来包含当前月的所有日期(无需考虑闰年或不同月份的天数差异):

SELECT *
FROM tbl_item_history IH
WHERE IH.IH_Date >= '2022-03-01'
  AND IH.IH_Date < DATEADD(MONTH, 1, '2023-02-01')
ORDER BY IH.IH_DATE ASC

注:DATEADD(MONTH, 1, '2023-02-01')会返回2023-03-01,用<就能包含2023年2月的所有日期。

额外建议

如果IH_Date列上还没有索引,建议创建一个,进一步提升查询速度:

CREATE INDEX idx_tbl_item_history_ihdate ON tbl_item_history(IH_Date);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 08:35:22