【问题分类】索引功能使用

【关键词】索引、查询异常、时间字段、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 版本中修复该问题


数据库砖家
1 声望0 粉丝