我有一张包含样本的表格。插入的样本已经按时间戳自然排序。
我的问题是——当我从表中选择时,我是否必须使用 ORDER BY 子句来确保获取的样本按时间戳排序?
关系数据库中的行未排序(将它们想象成篮子中的球。哪个是“第一个”?)
获得一致排序结果的唯一方法(真的,唯一ORDER BY
的)是使用.
您不能依赖连接的副作用,group by
. UNION
, 索引检索或类似的运算符。他们永远不会保证订单。DBMS 可以自由选择以它认为最快的顺序返回行,除非您指定ORDER BY
.
如果 HSQLDB 表 T 有一个列 C 作为主键,或者在该列上有任何索引,
SELECT FROM T ORDER BY C
将返回有序行而无需额外的 ORDER BY 处理。
如果 select 上有一个条件,它使用不同列上的索引,您仍然可以强制使用索引进行 ORDER BY:
SELECT FROM T WHERE <some condition> ORDER BY C USING INDEX
但在这种情况下,如果将返回表的大部分行,则应仅使用 USING INDEX。否则最好让引擎使用其他索引以减少表扫描时间。
如果没有用于 ORDER BY 的索引,则忽略 USING INDEX。