6

Tquery SQL ステートメントの結果セットでレコードを検索するための最良の (読み取り: 最速の) 方法は何だろうと思っています。

今まで私は TQuery.Locate を使用していました。私が正しければ、結果セットの検索に使用できる唯一のステートメントです。では、これを最適化するにはどうすればよいでしょうか。

いくつかのアイデアがありますが、大規模なデータセットでそれらすべてを比較する時間はまだありません。

次のフィールドを持つテーブルがあるとします。

Create Table aTable (
 ID int, 
 Name1 varchar(50), 
 Name2 varchar(50));

そして、次のクエリ:

SELECT ID, Name1, Name2 from aTable

結果セット内の ID でレコードを検索したい

  • aTable に ID のインデックスがある場合、検索は高速になりますか?
  • SQL ステートメントに「Order By ID」を追加すると、検索が速くなりますか?

これに関するアイデアはありますか?

[編集] これの使用を明確にするために: クエリは Reportbuilder Dataview によって実行され、データパイプライン (TQuery.Dataset) を通じて利用可能になります。カスタム レポートでは、より高いレベルの ID に基づいてパイプラインを移動する必要があります。したがって、クエリを使用しないことはここでは適用されません。上記の私の提案のいずれかが物事をスピードアップするかどうか疑問に思っています。

4

3 に答える 3

4

役立つヒントをいくつかご紹介します

  • インデックス付きの列でのみ Locate() メソッドを使用する
  • インデックス付きの列でのみ「order by」を使用する
  • クエリを開く前に準備を使用する
  • DisableControls / EnableControls を使用する
  • 必要に応じて、昇順/降順インデックス (または両方) を使用します
  • FastReportsを試してみる

大規模なデータセットにマスター/詳細がある場合は、すべての詳細レコードをフェッチしないでください。つまり、ローカルのマスター詳細を使用しないでください。DB エンジンが目的のレコードのみを取得できるようにします。

于 2011-08-08T13:24:40.067 に答える
1

大規模なデータセットでこれを頻繁に行う必要がある場合は、データセットをレコード配列に変換し、インデックス フィールドにいくつかのカスタム検索ルーチンを実装することをお勧めします。

于 2011-08-08T11:47:34.583 に答える
0

期待される行のみを取得するには、検索する ID を追加する必要があります。

ReportBuilder のデータビューで、クエリ デザイナーに移動し、[検索] タブに移動して、[自動検索] オプションを使用してフィールド設定を追加します。

次に、ReportBuilder Calcビューに移動し、メニューから [View / Events] を選択します。「レポート オブジェクト」ツリー ビューでレポートルート項目をクリックし、「OnGetAutoSearchValues」をダブルクリックして、期待値を取得します。

var
    Fld : TppAutoSearchField;
    i   : integer;     
begin
  for i:=0 to Report.AutoSearchFieldCount-1 do
  begin
   Fld := Report.AutoSearchFields[i];

    if Fld<>nil then
    begin    
      if (Fld.FieldName='FIRST_PARAM') then 
      begin
        Fld.SearchExpression := .....;
      end
      else if (uppercase(Fld.FieldName)='2ND_PARAM') then
      begin 
        Fld.SearchExpression := intToStr(...);
      end;
    end;
  end;  
end;
于 2011-08-08T12:01:44.243 に答える