【问题分类】索引功能使用
【关键词】索引、查询异常、时间字段、varchar 类型
问题描述
在某些业务场景中,原本可以正常查询的 SQL,在对字段添加索引后突然无法查出结果,数据仿佛“凭空消失”。
问题原因分析
这是由于旧版本 YashanDB 存在一个与字符串类型字段索引相关的 Bug。特别是当时间字段被定义为 varchar 类型,并在查询中混用 DATE_FORMAT 时,索引无法被正确命中,导致查询结果为空。
解决/规避方案
为避免该问题,建议采取以下措施:
1.调整字段类型
在建表时,将 UPDATETIME 等时间相关字段定义为 DATE 或 TIMESTAMP 类型,而非 varchar 字符串。
2.统一使用时间格式处理函数
查询条件中,要么全用 DATE_FORMAT,要么完全不用,保持一致性:
-- 推荐方式一(都使用 DATE_FORMAT)
DATE_FORMAT(updatetime, '%Y-%m-%d')
BETWEEN DATE_FORMAT('2021-10-19', '%Y-%m-%d')
AND DATE_FORMAT('2021-10-20', '%Y-%m-%d')
-- 推荐方式二(全部使用原始格式)
updatetime BETWEEN '2021-10-19' AND '2021-10-20'
影响版本
22.2.5.0 及以下版本
修复版本
已在 22.2.7.2 版本中修复该问题
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。