いくつかの .dbf ファイルを読み取るために、いくつかのクエリを作成するという課題がありました。ファイルは Visual FoxPro ファイルであり、ここでの大きな問題は、結合の使用を開始したときです。これにより、一時ファイルが非常に大きくなり、最終的に次のようなエラーが発生するためです。
File c:\users\me\appdata\local\temp\00001kjd000a.tmp is too large.
さらに、クエリには非常に長い時間がかかり、これは私が望んでいるものではありません。sqlserver と c# コードを使用してこのデータにアクセスしようとしましたが、非常に遅いです。
データベースのサイズは、約 350mb、100mb、および 10mb です。プロセスを「高速化」するためにこれらのファイルをローカルに持っていますが、これらからのトリプル結合には15分以上かかります...
そして、私は2GBの別のものを使用する必要があることを知っています
私が使用しているコード:
string connStr = @"Provider=VFPOLEDB.1;Data Source=D:\data\B. Mayer Real\;";
string qryStr = @"
select top 100 *
from db1 a, db2 b, db3 c
where a.id = b.id
and b.id = c.id
order by a.id
";
OleDbConnection conn = new OleDbConnection(connStr);
conn.Open();
OleDbCommand cmd = new OleDbCommand(qryStr, conn);
OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);
DataSet data = new DataSet();
adapter.Fill(data);
DataTable table = data.Tables[0];
foreach (DataRow myDataRow in table.Rows)
{
Console.WriteLine("Found data {0}", myDataRow[1]);
}
Console.ReadLine();
conn.Close();
編集:
最大の問題は、単にファイルを通過することです...次のようなことをすると:
SELECT *
FROM [CARATLOCAL]...[lzarb]
where la_nummer = 364999
これにはすでに30秒かかります
このクエリには 38 分かかりました。(1行だけです)
select max(la_datum + convert(datetime, la_time, 108)) as book_datetime, la_nummer, la_index from [CARATLOCAL]...[lzarb]
where la_datum is not null and la_time is not null and la_nummer = 364999
group by la_nummer, la_index