質問

私は自分のDBからのデータを持つテーブルを構築するためにdisplaytagを使用しています。これは、要求されたリストには、その大きなない場合はうまく動作しますが、リストのサイズが2500のエントリの上に成長した場合、結果のリストを取得することは非常に時間がかかる(5分以上)。この動作が正常であれば、私は思っていました。

あなたが大きな結果を返す大きなリスト/クエリを処理する方法?

他のヒント

メモリー(セッション)でDisplaytagの曳して保存すべて。 Hibernateはまた、それを行います。あなたは、減速はすでに2500行で始まる場合は、それがよりひどく最適化されたSQLクエリ/ DBテーブルの問題のように見える(メモリに一度に全体のDBテーブルの内容を持っている必要はありません; 2500行がためにピーナッツでなければなりませんまともなDB、しかし)OK、それはまた別の話だ。

むしろ JSTLの少しの助けを借りてHTMLテーブルを自分で作成 c:forEach EL でのショット。 input type="hidden"背景1つのまたは2つのリクエストパラメータを保つ:最初の行(firstrow)が表示されるように、最終的に行の量を一度に表示する(rowcount

次に、あなたのDAOクラスでちょうどSELECT stuff FROM data LIMIT firstrow OFFSET rowcountまたは使用DBに応じて、そのような何かを行います。 MySQLとPostgreSQLでは、あなたはそのようなLIMITおよび/またはOFFSET句を使用することができます。オラクルでは、サブクエリを発射する必要があります。 MSSQLおよびDB2では、SPを作成する必要があります。あなたはHQLでそれを行うことができます。

次に、テーブルを通じてページに、ちょうど/ firstrow毎回でrowcountをデクリメント中に、サーバー側のコードを指示バンチボタンがあります。ただ、数学を行います。

編集:あなたがDB2を使用しているとコメントしました。私は少しの研究を行ってきた、あなたがこのためにUDB OLAP機能ROW_NUMBER()を使用することができます表示されます。

SELECT id, colA, colB, colC 
    FROM (
        SELECT 
            ROW_NUMBER() OVER (ORDER BY id) AS row, id, colA, colB, colC
        FROM
            data
        ) AS temp_data
    WHERE
        row BETWEEN 1 AND 10;

この例ではdataテーブルから第10行を返すべきです。あなたはすべてのページのためにそれを再利用できるように、このクエリをパラメータ化することができます。これは、Javaのメモリにテーブル全体を照会するよりも効率的です。また、テーブルが適切にインデックス化されていることを確認します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top