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
相关产品推荐
相关产品推荐

