1

私は、100 万行を超えるテーブルの php Web ベースのページングを作成しようと取り組んできました。

私が読んだことに基づいて、3つのオプションがあります

  1. 結果セットのすべての行を取得します-サイズのせいで私には不可能です
  2. 1000行を取得し、一時テーブルに保存し、そのイテレータを作成してページをめくります-クエリが多すぎます-挿入が多すぎます!!
  3. 誰かがページを前後に選択した場合に毎回クエリを実行する

現在、オプション 3 を機能させようとしています。最初のページが「select * from account order by acct fetch first 10 rows only」ページの次の「select * from account where acct>(last record) order by acct fetch first 10 only」page last record "select * from account where acct=(select max(acct) from account)"

問題は前のページを表示することです。これで助けていただければ幸いです。

4

3 に答える 3

4
SELECT *
  FROM (
    SELECT 
      *, 
      ROW_NUMBER() OVER (ORDER BY acct) AS RowNum
    FROM 
      account
  ) AS Data
WHERE 
  RowNum BETWEEN 100 AND 110;

まず、を取り除く必要がありますSELECT *。必要なフィールドのみを選択してください。

にインデックスを付けます。acctこれは構成に役立ちますROW_NUMBER() OVER (ORDER BY acct)

を使用して、SELECT COUNT(*) FROM accountページ数を決定します。

また、SQL検索DB2でページネーションを行うための最速の最も/効率的な方法もお読みください。

于 2012-12-26T09:51:59.430 に答える
0

LIMIT..OFFSETソリューションはDB210以降でサポートされています。古いバージョンの場合、MySQLとの互換性を有効にする必要があります。

$ db2set DB2_COMPATIBILITY_VECTOR=MYS
$ db2stop
$ db2start

その構文を使用するためにdb2cmdで。

于 2013-03-07T17:55:20.393 に答える
-1
SELECT * FROM foo LIMIT 10, 1;

mysql で制限とオフセットを試してください。

これは主にページネーションの作成に使用されます

于 2012-12-26T06:42:43.853 に答える