0

問題文 : Oracle テーブルに 3000000 のレコードがあります。ユーザーは、ブラウザでこのテーブルをページネーション付きのテーブル (jquery データ テーブル) として表示したいと考えています (1 ページあたり 100 レコード)。私が設計したとき、約 30000 ページになります。その数の行を返します。ここでの問題は、各ページの読み込みに約 20 秒かかることです。

誰かが私に「このシナリオに取り組む方法を提案できますか?そのユーザーは自分の側からの遅さを感じません.これらの多くのレコードのサーバー側でのキャッシュは良いオプションですか?」

クエリは次のようになります。

SELECT /*+ ALL_ROWS */ * FROM 
(SELECT ROWNUM SNO , A.* FROM 
( SELECT /*+ PARALLEL(ABCTABLE 4)*/ COUNT(*) OVER ( ) CNT, 
            columnA, columnb,columnc
             FROM ABCTABLE )
       order by columnA, columnb,columnc ) a )
       where sno between ? and ?;

? と ?:- ページ範囲は 1 から 30/30 から 60/.....

4

3 に答える 3

1

GUI ユーザーが 3000000 レコードをすべて見るかどうかはまだ疑問です。間違いなく、彼は 1000 レコード (10 ページ) 前後の最新の行 (フィルター) に関心があるため、最初の 1000 レコードをクライアントに渡し、クライアントが各ページに 100 レコードを 10 ページまで表示できるようにします。その後、次の 1000 レコードについてサーバーに ping を実行できます。

遅延が ORACLE フェッチにある場合は、クエリのタイミングを短縮するためにテーブルのインデックス作成を検討してください。 http://www.codeproject.com/Articles/39006/Overview-of-SQL-Server-2005-2008-Table-Indexing-Pa

また、Explain planで再確認してください。

于 2013-02-21T05:30:54.320 に答える
1

画面の制限のほとんどは、30 レコードのみを表示します。

アイデアは、ユーザーが 30000 レコードを穴の画面で見ることができないため、ユーザーに 30 レコードを表示することです。残りのレコードを表示するには、下にスクロールする必要があります。

彼が下にスクロールしたら、ページごとに 30000 レコードに達するまで、次の 30 レコードを取得してみてください。

すべてのレコードを取得するのではなく、Sql クエリで limit を使用してレコード数を制限すると、ページの読み込み時間が短縮されます。

このように、ページごとに 1 ~ 30000、30001 ~ 60000 などの基本制限があります。

次に、各スクロールで 1 から 30 までの SQL 制限があります

sql_limit = base_limit + 30

ユーザーが 30 番目のレコードの最後までスクロールすると、新しい 30 レコードが取得されます

sql_limit+30

30000ページの制限に達するまで、このプロセスを続けます

sql_limit >= page_limit まで

sql_limit が page_limit を超えた場合、新しいページにジャンプし、各ページで同じプロセスを再度実行します。

于 2013-02-21T08:55:56.633 に答える
1

パフォーマンスを改善するには、まずボトルネックを見つける必要があります。それはいくつかの可能性があります:

  1. 不適切なクエリ プランやインデックスの不足などにより、クエリの戻りが遅くなります。
  2. ネットワークが遅いため、データの戻りが遅い
  3. アプリケーションでのデータのレンダリングが遅い

300 万件のレコードを閲覧したいと思う人はいません。人々は何かを探しています。合理的な検索/フィルタリング基準とインデックスを追加すると、より使いやすいアプリケーションが得られます。

于 2013-02-21T05:38:00.077 に答える