テーブルの内容全体をできるだけ早くメモリに読み込みたい。私は Nexus データベースを使用していますが、Delphi のすべてのデータベース タイプに適用できるテクニックがいくつかあるかもしれません。
私が見ているテーブルには、20 列の 60,000 レコードがあります。したがって、巨大なデータセットではありません。
私のプロファイリングから、これまでに次のことがわかりました。
TnxTable を使用してテーブルに直接アクセスすることは、SQL クエリと 'SELECT * FROM TableName' を使用することよりも速くも遅くもありません。
実際にデータを読み取ったりコピーしたりせずに、行をループするという単純な操作に、ほとんどの時間がかかります。
私が得ているパフォーマンスは
- すべてのレコードをループすると 3.5 秒かかります
- すべてのレコードをループし、値を読み取って保存すると、3.7 秒かかります (つまり、わずか 0.2 秒長くなります)。
私のコードのサンプル
var query:TnxQuery;
begin
query.SQL.Text:='SELECT * FROM TableName';
query.Active:=True;
while not query.Eof do
query.Next;
これには、60,000 行のテーブルで 3.5 秒かかります。
このパフォーマンスは合理的に聞こえますか? データをより速く読み取ることができる他のアプローチはありますか?
現在、同じコンピューター上のサーバーからデータを読み取っていますが、最終的には LAN 上の別のサーバーから読み取っている可能性があります。