Indexing hsqldb:我是否必须按订单来确保一致的选择顺序?

Indexing hsqldb:我是否必须按订单来确保一致的选择顺序?,indexing,hsqldb,Indexing,Hsqldb,我有一张包含样品的桌子。插入的样本已按时间戳自然排序 我的问题是-当我从表中选择时,我是否必须使用ORDER BY子句来确保获取的样本按时间戳排序?关系数据库中的行未排序(将它们想象为篮子中的球。哪一个是“第一个”?) 获得一致排序结果的唯一方法(实际上,唯一的方法)是使用排序依据 您不能依赖联接的副作用,分组依据联合、索引检索或类似运算符。他们决不会保证订货。DBMS可以自由选择以其认为最快的顺序返回行,除非您指定关系数据库中的顺序,否则行是未排序的(将它们想象为篮子中的球。哪一个是“第一个”

我有一张包含样品的桌子。插入的样本已按时间戳自然排序


我的问题是-当我从表中选择时,我是否必须使用ORDER BY子句来确保获取的样本按时间戳排序?

关系数据库中的行未排序(将它们想象为篮子中的球。哪一个是“第一个”?)

获得一致排序结果的唯一方法(实际上,唯一的方法)是使用排序依据


您不能依赖联接的副作用,
分组依据
<代码>联合、索引检索或类似运算符。他们决不会保证订货。DBMS可以自由选择以其认为最快的顺序返回行,除非您指定关系数据库中的
顺序,否则行是未排序的(将它们想象为篮子中的球。哪一个是“第一个”?)

获得一致排序结果的唯一方法(实际上,唯一的方法)是使用排序依据


您不能依赖联接的副作用,
分组依据
<代码>联合
、索引检索或类似运算符。他们决不会保证订货。DBMS可以自由选择以其认为最快的顺序返回行,除非您指定一个
顺序,如果HSQLDB表T的主键是列C,或者该列上有任何索引

SELECT FROM T ORDER BY C
将通过处理返回已排序的行,而无需额外排序

如果select上存在对不同列使用索引的条件,您仍然可以通过以下方式强制使用ORDER索引:

SELECT FROM T WHERE <some condition> ORDER BY C USING INDEX
从T中选择,其中使用索引按C排序
但在这种情况下,只有在返回表的大多数行时,才应该使用USING INDEX。否则,最好离开引擎使用其他索引以减少表扫描时间


如果没有用于ORDER BY的索引,则忽略USING INDEX。

如果HSQLDB表T的主键为列C,或者该列上有任何索引

SELECT FROM T ORDER BY C
将通过处理返回已排序的行,而无需额外排序

如果select上存在对不同列使用索引的条件,您仍然可以通过以下方式强制使用ORDER索引:

SELECT FROM T WHERE <some condition> ORDER BY C USING INDEX
从T中选择,其中使用索引按C排序
但在这种情况下,只有在返回表的大多数行时,才应该使用USING INDEX。否则,最好离开引擎使用其他索引以减少表扫描时间


如果没有可用于ORDER BY的索引,则将忽略使用索引。

使用ORDER BY,只是为了安全起见。我仍有兴趣知道是否有必要。我觉得没有必要。但是,如果记录的数量很大,ORDERBY子句可能会严重影响性能。根据我的经验,HSQLDB没有有效地使用索引。@noob:但是如果您需要按特定的顺序排列这些行,就没有其他方法可以保证这种顺序。如果您不需要对它们进行排序(或不关心),则不应使用
order by
(因为这通常会使查询速度变慢)。使用order by,只是为了更安全。我仍然有兴趣知道是否有必要。我觉得没有必要。但是,如果记录的数量很大,ORDERBY子句可能会严重影响性能。根据我的经验,HSQLDB没有有效地使用索引。@noob:但是如果您需要按特定的顺序排列这些行,就没有其他方法可以保证这种顺序。如果您不需要对它们进行排序(或不关心),则不应使用
orderby
(因为这通常会使查询速度变慢)。@mark:这取决于具体情况。我想大部分时间在服务器上排序可能会更有效率。@mark:为什么不试试呢?这个问题没有明确的答案。@mark:那要看情况了。我想大部分时间在服务器上排序可能会更有效率。@mark:为什么不试试呢?这个问题没有明确的答案。