0

我有一个查询,我在内部连接的派生表中执行 Order by。

前任:

SELECT g.*
FROM (
    SELECT ...
    FROM ...
    ORDER BY alias.some_column
    LIMIT 0, 20
) as g
... # other joins

这在 MySQL 中运行良好,但在 HSQLDB 中失败。我在这里下订单的原因是 mysql 比将 ORDER BY 放在外部查询中要快得多。这是纯粹的性能胜利。但是,HSQLDB 正在抱怨。

这是一个例外:

WARN JDBCExceptionReporter:100 - SQL Error: -70, SQLState: 37000
ERROR JDBCExceptionReporter:101 - Cannot be in ORDER BY clause in statement [SELECT g.* FROM gallery g    LEFT OUTER JOIN preview p       ON p.id = g.preview_id    INNER JOIN (       SELECT g.id, g.date_created       FROM gallery g       WHERE g.published = true        ORDER BY g.date_created DESC       LIMIT 0, 20    ) as g_ids on g_ids.id = g.id ]

这是一个大问题,因为我的测试使用 HSQLDB,但生产系统是 MySQL。我可以将这些测试作为“异常”移动并针对 mysql 运行,但它要慢得多......并且为了让测试通过而使生产系统变慢会破坏测试点。

我可以重组我的测试以使用 mysql 进行一些测试,而不是一揽子使用 hsqldb 进行所有测试……这对我来说是一个很大的测试框架变化。那么有没有办法让 hsqldb 玩得很好,还是我必须改进我的测试框架?

谢谢!

4

2 回答 2

0

我会说改进你的测试框架。在一个平台上编写并在另一个平台上部署总是很危险的。

于 2010-07-12T18:19:00.033 回答
0

除了更改测试框架之外,一种选择是还考虑使用更新版本的 HSQLDB,或者使用另一个 Java 数据库。有 Apache Derby(不幸的是它不支持 LIMIT)和 H2 数据库引擎。

于 2010-07-13T08:25:55.220 回答