
VisualBasicでデータ検索プログラムを作成しています。
データ検索の速度で困っています。
データA
太郎,いちご,スイカ
花子,スイカ,トマト
一郎,バナナ,りんご
・
・
・
データB
いちご,100
スイカ,200
トマト,150
バナナ,350
りんご,280
・
・
・
このようなデータでそれぞれが5万件程度ある場合、
1、配列を使ってメモリにそれぞれのデータを格納してFor文+if文で検索する
2、それぞれのデータをDBに入れSelect文で検索する
のいずれの処理が高速にできますか?
求めたいものは、太郎、花子、一郎・・・のそれぞれの金額です。
やはり断然DBのほうが早いのでしょうか?
No.1ベストアンサー
- 回答日時:
DBがという前に、
どういうデータ状態にしてから検索するか、というものあると思います。
データA
太郎,いちご,スイカ
花子,スイカ,トマト
一郎,バナナ,りんご
・
・
で
「太郎」の「いちご」レコードのとき「いちご」を比較してヒット,
「太郎」の「スイカ」レコードのとき「いちご」を比較して違う、
→「スイカ」と比較してヒット、
これでは「スイカ」のとき「いちご」の比較が無駄になります。
データAの数は変わらないので
まずは、
データBの比較対象件数をいかに減らすロジックにするか、
それによってDBだったり、プログラムでマッチングだったり、IF文だったり、
のように思います。
これらはコード化(並び替え)されてますか?。
データBの件数は数万件あり、それの並び替えはしていません。
指摘いただけたように、検索対象件数を減らす努力がまだまだ足らないです。
質問のたとえでいえば、野菜、果物のグループ分けや、色、原産国?のようなわけ方でデータBを細分化することは可能ですね!
実際のデータも2+4+4桁で分解することも可能ですので、分解して検索する方法を試してみます。
データベースを使うことは一からの勉強となるため少し戸惑っていましたが、使わない方法でもいけそう?ですのでもう少しがんばってみます。
プログラムが完成したら、DBプログラムも作成し、比較してみます。
ありがとうございました。
No.3
- 回答日時:
もう、随分と前のことになりますが・・・。
紳士服の注文データをサイズテーブルや補正コードテーブル等と付き合わせしてCADの処理データに変換するアプリケーションを開発したことがあります。Accessに登録したデータをSelect文で抽出するという手法ですと1件当たりの処理時間が約30分でした。その余りの遅さに困った私は、一旦、Accessのテーブルを配列に落として保存。結果、一件当たりの処理時間は0.01秒以下に短縮されました。ですから、配列を利用した方が断然に速いのは確実ですが・・・。
ただ、問題は、5万件という極めて少ないデータ量。これ位ですとAccessでも0.1秒以下で検索できるでしょう。AccessでなくSQL Server、MySQL 等ですと0.002秒もあれば十分かと思います。
なにも考えないFor + If文ですと、検索10件に1秒程度かかっているようです。
3万件のデータで3000秒もかかってしまうので・・・待ってられないというのが現状でした。
たとえが食べ物でしたが、利用目的はシミュレーションですので、極力結果を速く得たいという気持ちからの質問でした。
質問のデータBの最適化でどれだけ早くなるか試してみて、それからDBも試してみたいと思います。データBの最適化はDBの検索にも有効だと思いますのでそちらをまず注力します。
回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
教えて下さい
-
「0x00ff0000」?
-
EXCELVBAでSQLserverからデータ...
-
不規則なデータのfft処理
-
Fortran カンマを含む数値デー...
-
C言語で2桁Hex文字列を10進...
-
配列でデータが入っている要素...
-
【エクセル】測定時間がバラバ...
-
C言語を用いて、GNUPLOTでリア...
-
VBA 空白セルを削除ではない方...
-
<VB>String→Object
-
プログラミング python pandas ...
-
Visual Basic によるNC機械制御
-
S9タイプからXタイプにデータ...
-
ハミング窓関数とFFT(高速フー...
-
C# でDataTableの更新を高速化...
-
特定のデータの抽出方法を教え...
-
GridViewの行の一部を複数行にする
-
この行は既に別のテーブルに属...
-
メモ帳(テキストデータ)をExc...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
教えて下さい
-
【エクセル】測定時間がバラバ...
-
メモ帳(テキストデータ)をExc...
-
この行は既に別のテーブルに属...
-
多量のSUMIF式を軽くしたい
-
配列でデータが入っている要素...
-
EXCELVBAでSQLserverからデータ...
-
エクセルで2つの時系列のデー...
-
ACCESS VBA インデックスが有効...
-
二分探索の平均探索回数
-
Accessで該当データにフラグを...
-
ビットシフトについて
-
Rails4 Redirect_Toで送信
-
CString型の文字列連結について
-
[C言語] コメント文字列を無視...
-
ブレーカー落ちで壊れたりしな...
-
ActiveReportについて
-
バーコードリーダーの読込デー...
-
C# でDataTableの更新を高速化...
-
プログラミング python pandas ...
おすすめ情報