プロが教える店舗&オフィスのセキュリティ対策術

VisualBasicでデータ検索プログラムを作成しています。
データ検索の速度で困っています。

データA
太郎,いちご,スイカ
花子,スイカ,トマト
一郎,バナナ,りんご
 ・
 ・
 ・

データB
いちご,100
スイカ,200
トマト,150
バナナ,350
りんご,280
 ・
 ・
 ・

このようなデータでそれぞれが5万件程度ある場合、
1、配列を使ってメモリにそれぞれのデータを格納してFor文+if文で検索する
2、それぞれのデータをDBに入れSelect文で検索する
のいずれの処理が高速にできますか?
求めたいものは、太郎、花子、一郎・・・のそれぞれの金額です。


やはり断然DBのほうが早いのでしょうか?

A 回答 (3件)

DBがという前に、


どういうデータ状態にしてから検索するか、というものあると思います。

データA
太郎,いちご,スイカ
花子,スイカ,トマト
一郎,バナナ,りんご
 ・
 ・

「太郎」の「いちご」レコードのとき「いちご」を比較してヒット,
「太郎」の「スイカ」レコードのとき「いちご」を比較して違う、
→「スイカ」と比較してヒット、
これでは「スイカ」のとき「いちご」の比較が無駄になります。

データAの数は変わらないので
まずは、
データBの比較対象件数をいかに減らすロジックにするか、
それによってDBだったり、プログラムでマッチングだったり、IF文だったり、
のように思います。

これらはコード化(並び替え)されてますか?。
    • good
    • 0
この回答へのお礼

データBの件数は数万件あり、それの並び替えはしていません。

指摘いただけたように、検索対象件数を減らす努力がまだまだ足らないです。
質問のたとえでいえば、野菜、果物のグループ分けや、色、原産国?のようなわけ方でデータBを細分化することは可能ですね!
実際のデータも2+4+4桁で分解することも可能ですので、分解して検索する方法を試してみます。

データベースを使うことは一からの勉強となるため少し戸惑っていましたが、使わない方法でもいけそう?ですのでもう少しがんばってみます。
プログラムが完成したら、DBプログラムも作成し、比較してみます。

ありがとうございました。

お礼日時:2010/10/15 22:17

 もう、随分と前のことになりますが・・・。



 紳士服の注文データをサイズテーブルや補正コードテーブル等と付き合わせしてCADの処理データに変換するアプリケーションを開発したことがあります。Accessに登録したデータをSelect文で抽出するという手法ですと1件当たりの処理時間が約30分でした。その余りの遅さに困った私は、一旦、Accessのテーブルを配列に落として保存。結果、一件当たりの処理時間は0.01秒以下に短縮されました。ですから、配列を利用した方が断然に速いのは確実ですが・・・。
 ただ、問題は、5万件という極めて少ないデータ量。これ位ですとAccessでも0.1秒以下で検索できるでしょう。AccessでなくSQL Server、MySQL 等ですと0.002秒もあれば十分かと思います。
    • good
    • 0
この回答へのお礼

なにも考えないFor + If文ですと、検索10件に1秒程度かかっているようです。
3万件のデータで3000秒もかかってしまうので・・・待ってられないというのが現状でした。
たとえが食べ物でしたが、利用目的はシミュレーションですので、極力結果を速く得たいという気持ちからの質問でした。

質問のデータBの最適化でどれだけ早くなるか試してみて、それからDBも試してみたいと思います。データBの最適化はDBの検索にも有効だと思いますのでそちらをまず注力します。

回答ありがとうございました。

お礼日時:2010/10/15 22:27

こんばんは。




そこまでわかっているのなら
なぜご自分で試してみないのでしょう?
    • good
    • 0
この回答へのお礼

試してない理由は・・・DB操作をしたことが無いだけでした。
格段に違うなら学習からになりますが試してみたいと思います。
ありがとうございました。

お礼日時:2010/10/15 22:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!