1

私は自分のフレームワークのページング コンポーネントで忙しいので、次の 2 つのうちどちらが高速か (または、さらに優れたソリューションがあるかどうか) を考えています。

ここでの私の考えは、オブジェクトに次の順序で実行させることです。

  1. GET 変数から現在のページとページごとの結果を取得する
  2. 表示目的で結果の合計金額を取得する (534 件中 10 件の結果を表示)
  3. 現在のページとページごとの結果に基づいて、取得する結果を決定します。
  4. ページングクラスを表示および構築するために、結果をビューに返します

私が見ることができるものから、2つのオプションのいずれかがあります:

結果の少ない複数のクエリ

  1. クエリを実行して、すべての結果の行数を決定します。
  2. 別のクエリを実行して、オフセットを使用してアクティブなページに必要な結果を返します

1 つのクエリで PHP に処理させる

  1. すべての行を配列に戻す
  2. PHP を取得して配列から行を返し、count() を実行します。

やったほうが早いのはどっち?オプション1の結果が多いほど良いことは理解していますが、行をカウントして特定の結果を返す2つのクエリは、すべての結果を返し、PHPに残りの処理を実行させる1つのクエリよりも高速に感じます。

おそらく私が見逃している別のより十分な方法はありますか?

4

3 に答える 3

3

試して。

フレームワークが何をしているか、データベースがどのように構造化されているか、または PHP コードがデータに対してどの程度の処理を行っているかはわかりません。両方のコア項目をコーディングし、同じモック データ セットでテストを実行します。

本当に町に行きたい場合は、さまざまな負荷テスト項目を使用して、一連のプレースホルダー データに対して一連のテストを実行します。結局のところ、あなたは「フレームワーク」を作っているので、何がうまくいくかを見つけたほうがよいでしょう。

そして私自身の個人的な意見:

PHP コードがフルページ レンダリングであるか、個々のセッション内で実行される場合は、内部 SQL ビューを使用してページを取得します。一度に複数のセッションで使用される *.php ファイルがあり、そうすることでデータベースのラウンドトリップを回避できる場合にのみ、データ全体を PHP に保存してください。

于 2013-05-27T19:48:38.610 に答える
1

を使用すると、結果を( )MySQLiに残して、のメモリの過負荷を避けるためにそれらを 1 つずつ読み取ることができます。MySQLMYSQLI_USE_RESULTPHPPHP

必要な情報はすべてここにあります: http://uk1.php.net/manual/en/mysqli.query.php

ノート:

を呼び出さない限りMYSQLI_USE_RESULT、後続のすべての呼び出しを使用すると、エラー が返されます。Commands out of syncmysqli_free_result()

于 2013-05-27T19:37:23.640 に答える
0

最初のアプローチを 1 つのクエリで使用して ( COUNTPHP などではなく MySQL の関数を使用してmysql_num_rows) カウントを取得し、別のクエリを使用して現在のページに必要な行を選択するだけで、ページごとのオフセットと結果の引数を指定することをお勧めします。

于 2013-05-27T19:39:43.703 に答える