0

Firebird/Interbase データベースには 、TIBQueryTIBTableおよびがありTIBDataSet、これらにはFetchAllデータ セットの行数をカウントするメソッドがあります。そのメソッドを呼び出さない場合、これらのデータ セットは、ユーザーが や で既に見た行の数を「合計」として登録するだけTDBGridですTDBNavigator。この「合計」は、これらのデータ セットの「RecordCount」メソッドを呼び出すことで取得できます。

実際の合計行を取得する別の (はるかに効率的な) 方法は、分離されたデータ セットを取得し、いくつかを実行してSELECT COUNT(*) FROM TABLE_NAME、好きなフィルターを適用します。ここまで大丈夫です。

しかし、ZeosLib を介して MySQL を使用するようになった今、メモリに 2 番目のクエリを配置するためにその問題が発生する必要があるかどうか疑問に思いました。

ZeosLib がクエリを作成し、返された行数を含むそのクエリの統計を内部的に返す可能性があることはわかっています。

ZeosLib はその情報を に入れますか、RecordCountそれとも Interbase コンポーネントとまったく同じように機能しますか?

4

1 に答える 1

1
  1. Zeos は、すでにフェッチされたレコードの数を返します。適用されたフィルターを考慮せず、FetchAll返す前に考慮しませんRecordCount
  2. SELECT COUNT(*) ...追加のサーバー ワークロードが作成され、元のクエリを実行するためのワークロードと等しい場合があるため、「はるかに効率的」ではありません。
  3. 一般に、データ アクセス ライブラリは、3 つのレコード カウント計算モードを提供する場合があります。フェッチされた行の数、表示される行の数 (最初と同様ですが、フィルターを適用した後)、およびSELECT COUNT(*). FetchAll かどうかは、明示的に制御した方がよいでしょう。これがAnyDACで行われる方法です( more )。
于 2012-08-22T07:03:53.483 に答える