4

私はから選択しています(複雑なものは何もありません)

Select * from VIEW

このビューには、約 6000 のレコードと約 40 の列があります。これは、Lotus Notes SQL データベースから取得されます。つまり、私の ODBC ドライブは LotusNotesSQL ドライバーです。クエリの実行には約 30 秒かかります。私が働いていた会社では、EXCELを使用してクエリを実行し、すべてをワークシートに書き込んでいました。すべてをセルごとに書き込むと想定しているため、完了するまでに最大 30 ~ 40 分かかりました。

次に、MS アクセスを使用しました。データを格納するために、Access でレプリカ ローカル テーブルを作成しました。私の最初の試みは

INSERT INTO COLUMNS OF LOCAL TABLE
FROM (SELECT * FROM VIEW)

これは疑似コードであることに注意してください。これは正常に実行されましたが、ここでも 20 ~ 30 分かかりました。次に、VBA を使用してデータをループし、個別のレコードごとに (INSERT ステートメントを使用して) 手動で挿入しました。これには約 10 ~ 15 分かかりました。これは私の最高のケースです。

後で行う必要があること: データを取得したら、部門別にフィルター処理する必要があります。問題は、SQLクエリにwhere句を入れた場合です(クエリの実行に30秒から約10分+ローカルテーブル/ Excelへの書き込み時間にジャンプします)。どうしてか分かりません。列がすべてテキスト列であるためでしょうか?

一部の列を整数に変更すると、where 句の点で高速になりますか?

これにアプローチする方法についての提案を探しています。私の上司は、Java ベースのソリューションを採用できると言っていました。これは役に立ちますか?私は Java の人ではなく ac# であり、おそらく c# を使用するように説得することもできますが、主に時間を短縮する方法についての提案を探しています。すでに 40 分から 10 分に短縮されていますが、2 分未満が必要です。

要約すると:

クエリの実行には約 30 秒かかります

Excel/Access でローカルにクエリを使用するには、約 15 ~ 40 分かかります

2分以内に必要

Javaベースのソリューションを使用できます

Java の代わりに他のソリューションを提案することもできます。

4

5 に答える 5

2

一括クエリを使用してみましたか? 週の初めに C# で同じ問題が発生しました。約 25000 レコードを挿入する必要があり、約 30 分かかりました。バルクインサートに変更すると、約5秒に短縮されます。

于 2010-06-18T13:07:55.060 に答える
1

レコードが挿入された後に Access テーブルにインデックスを付けましたか。これにより、クエリがはるかに高速になります。

于 2010-06-18T13:35:11.190 に答える
0

次のようなものを試してください。

SELECT * INTO NewTable FROM View
于 2010-06-18T13:21:07.220 に答える
0

一括挿入の使用がサポートされていないか、面倒な場合、簡単な解決策はトランザクションを使用することです。ほとんどのDBは原子的に安全であると想定されているため、すべての挿入には特定の最小オーバーヘッドが伴います(これは非常に単純化されていますが、なんでもいい)。すべての挿入を単一のトランザクションにラップすることで、アトミックコミットのオーバーヘッドを回避できます。

ただし、実際にパフォーマンスを向上させるには、さらにベンチマークを行う必要があります。特に、insert遅いのはsですか、select ... from viewそれとも?

于 2010-06-18T13:13:23.227 に答える
0

私は Lotus Notes SQL にあまり詳しくありませんが、テキスト列に整数があるという事実は、非常に多くの理由からかなり悪い考えのように思えます。

  • データの整合性: これらの整数の 1 つが「foo」になる可能性があります。その後、あなたは何をしますか?
  • パフォーマンス: 通常、整数は小さく、アプリケーションでの操作が簡単です。
  • 並べ替え: 数字を並べ替えると、9、10、11、100 が得られます。それらをテキストとして並べ替えると、10、100、11、9 が得られます。

さて、あなたの問題です... Lotus Notes SQL は舞台裏で NotesSQL データベースを使用していると思います。これで自分でインデックスを作成できると思います。WHERE 句にある列にインデックスを作成しようとしましたか?

于 2010-06-18T13:33:14.033 に答える