日期时间索引对子秒级值进行错误的比较: ORDER BY 在 ASC/DESC 之间不一致; 索引范围 + ORDER BY 会默默地丢弃行
说明
在 " 日期 " 字段上界定了一个标准(非唯一)指数, " ORDER BY " 对该字段错误地将整秒的值与分秒的值放在同第二个字段内,错误的顺序是 " 不一致 " 。 加上整个一秒的距离下方(天/小时桶查询的自然形状),行从结果设定中静静地掉出.
没有索引,顺序和结果是正确的——缺陷在索引后排/扫描路径,而不是通类.
- 复制步骤
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? (一) 防御系统(INDEX idx ts on t FIELDS ts); CREATE t SET ts = d'2026-08-28T09:00:00Z'; (中文(简体) ). CREATE t SET ts = d'2026-08-28T09:00.152Z' ; (原始内容存档于2017-08-28). CREATE t SET ts = d'2026-08-28T09:00:611Z'; (原始内容存档于2026-08-28). CREATE t SET ts = d'2026-08-28T09:00:917Z'; = ('). CREATE t SET ts = d'2026-08-28T09:00:01.070Z'; 2.
(c) 由美国航天公司订购的电压; 由Ts DESC命令的电源值; SELECT VALUE ts from ters 由 ts ASC LIMIT 20 命令于 Q 2026-08-28T 09:00Z ;
例如,通过`超现实 sql-endpoint内存-名称空间测试-数据库测试'运行。
实际产出
命令 Ts ASC: 整个第2类在它自己的子秒之后 [.152Z, 6.11Z, 9.17Z, 09:00:00Z, 09:00: 01.070Z] (中文(简体) ).
命令Ts DESC: 整个第二类作为小型(相接ASC) [09:00:01.070Z,917Z,611Z,152Z,09:00:00Z] (中文(简体) ).
-- 范围 + 命令 + 限制:5行中的3行 [09:00:00Z,09:00:01.070Z]
ASC索赔`09:00:00Z > 9:00:00.917Z';DESC索赔`09:00:00Z < 9:00:00.152Z ' ——没有一致的命令满足两者的要求。
第三个问题是危险的问题:`WHERE ts >= < swhole second * 与`ORDER BY ts'`在整秒键位置(错误地)开始排序搜索',所以Cursor后面的同一第二行地上的每一分行都从未达到结果。 任何"一次一天/小时的处理"模式(导出,存档,pagination)都会默默地失去第一秒分行.
* 预期产出
所有5行,订购 " 00Z <.152 < 611 < 917 < 01.070 " (和DESC倒数);范围查询返回所有5行。
受影响的版本
转载于:
- 官方`超现实 ' CLI**3.0.1**(发动机)-以上产出
- Rust SDK " 超现实b " **3.2.4**( " 超现实b-core " 3.2.4), " mem:// " 和超现实kv后端(0.21.4)
- " 超现实b " **3.3.0-β.3**——相同的失败
由于 " ts " 没有索引,所有三个查询对所有测试的版本都是正确的——这表明日期时间 index-key编码掉入或错置了次秒组件.
环境
Linux x86 64 (英语). 在SDK重写器中,`EXPLAIN FULL'确认以剩余滤波器(所有行通过)运行该范围的正确结果变体;行损失仅在该类有索引服务时才会出现.内容来源: surrealdb/surrealdb