- ベストアンサー
VisualBasicでデータ検索プログラムを作成:高速な検索方法は?
- VisualBasicでデータ検索プログラムを作成しています。データ検索の速度で困っています。
- データAとデータBの5万件のデータを効率的に検索する方法として、配列を使ってForループ+if文で検索する方法と、DBにデータを格納してSelect文を使って検索する方法の比較を行います。
- どちらの方法がより高速に検索できるのか、太郎、花子、一郎などの金額を求めるための効率的なデータ検索処理を知りたいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
DBがという前に、 どういうデータ状態にしてから検索するか、というものあると思います。 データA 太郎,いちご,スイカ 花子,スイカ,トマト 一郎,バナナ,りんご ・ ・ で 「太郎」の「いちご」レコードのとき「いちご」を比較してヒット, 「太郎」の「スイカ」レコードのとき「いちご」を比較して違う、 →「スイカ」と比較してヒット、 これでは「スイカ」のとき「いちご」の比較が無駄になります。 データAの数は変わらないので まずは、 データBの比較対象件数をいかに減らすロジックにするか、 それによってDBだったり、プログラムでマッチングだったり、IF文だったり、 のように思います。 これらはコード化(並び替え)されてますか?。
その他の回答 (2)
もう、随分と前のことになりますが・・・。 紳士服の注文データをサイズテーブルや補正コードテーブル等と付き合わせして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の検索にも有効だと思いますのでそちらをまず注力します。 回答ありがとうございました。
- ichhabehunger
- ベストアンサー率55% (27/49)
こんばんは。 そこまでわかっているのなら なぜご自分で試してみないのでしょう?
お礼
試してない理由は・・・DB操作をしたことが無いだけでした。 格段に違うなら学習からになりますが試してみたいと思います。 ありがとうございました。
お礼
データBの件数は数万件あり、それの並び替えはしていません。 指摘いただけたように、検索対象件数を減らす努力がまだまだ足らないです。 質問のたとえでいえば、野菜、果物のグループ分けや、色、原産国?のようなわけ方でデータBを細分化することは可能ですね! 実際のデータも2+4+4桁で分解することも可能ですので、分解して検索する方法を試してみます。 データベースを使うことは一からの勉強となるため少し戸惑っていましたが、使わない方法でもいけそう?ですのでもう少しがんばってみます。 プログラムが完成したら、DBプログラムも作成し、比較してみます。 ありがとうございました。