0

内部結合されている派生テーブル内で Order by を実行しているクエリがあります。

元:

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

これは MySQL では正常に機能しますが、HSQLDB では失敗します。ここで順序を指定する理由は、外部クエリに ORDER BY を配置するよりも mysql の方がはるかに高速だからです。それは純粋なパフォーマンスの勝利です。ただし、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 に対して実行することもできますが、はるかに遅くなります...そして、テストに合格するためだけに本番システムを遅くすると、テストのポイントが無効になります。

すべてに hsqldb を一括して使用するのではなく、一部のテストに mysql を使用するようにテストを再構築することもできます...これは私にとって大きなテスト フレームワークの変更です。hsqldb を正常に動作させる方法はありますか、それともテスト フレームワークを改善する必要がありますか?

ありがとう!

4

2 に答える 2

0

テストフレームワークを改善すると思います。あるプラットフォームで作成し、別のプラットフォームに展開することは常に危険です。

于 2010-07-12T18:19:00.033 に答える
0

テスト フレームワークを変更する代わりに、新しいバージョンの HSQLDB を使用するか、別の Java データベースを使用することを検討することも 1 つのオプションです。Apache Derby (残念ながら LIMIT をサポートしていません) と H2 データベース エンジンがあります。

于 2010-07-13T08:25:55.220 に答える