2

TClientDataset を開き、3 つの TBlobfields を含む 10.000 行をフェッチするには3 分かかります。

まったく同じデータを開きますが、BLOB フィールドを Varchar としてキャストすると、1 秒かかります。

唯一の違いは、TQuery (または TsqlQuery) には TBlobfield ではなく TStringfield があることです。しかし、データは同じです。ファイルに保存されたテーブル全体は、約 3 MB です。TsqlQuery、または (firebird) データベースに接続するための TQuery を使用しても同じ結果が得られます。

データベースはサーバー上にあり、Firebird 2.1 を実行しています。クライアントでデータベースを実行すると(両方とも1秒未満)、違いがなくなるため、ネットワークトラフィックに問題があると思われます...

さらに奇妙なことに、Clientdataset が実際に BLOB フィールドで満たされているかどうかは問題ではありません。したがって、clientdataset に永続フィールドが 1 つしかない場合 (number integer)、パフォーマンスは同じです...

このバグ(?)は私にとって大きな問題です...誰かがこれを説明してくれることを願っています...

4

2 に答える 2

3

Firebird FAQ Web サイトのこの投稿を確認してください。

一言で言えば、それは言います:

  1. 実際に BLOB データを読み取らずに (SELECT * を実行するだけで) BLOB を含むテーブルにクエリを実行する場合、列リストから BLOB を削除することをお勧めします。これは、BLOB はサーバーに 2 回アクセスする必要があるためです (1 回は BLOB ID を取得し、もう 1 回はデータを取得します)。 )。または、BLOB を varchar にキャストして、一部のデータをより高速に取得することもできます。

select ..., cast(my_blob_field as varchar(2000))

お役に立てれば。

于 2012-03-17T20:37:57.893 に答える