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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- その他(データベース) 20万行あるデータを動かしたい 2 2023/06/13 15:21
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- その他(ブラウザ) Android Google でなく Bing検索すれば 何検索したかわからずデータ収集されない? 2 2023/03/10 05:25
- Visual Basic(VBA) 検索のユーザーフォームの表示について 1 2023/03/27 23:31
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- その他(ソフトウェア) 一太郎付属の”全件検索”ツールの不具合 3 2023/07/25 15:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
合計3TBのデータのハッシュ値を...
-
教えて下さい
-
配列でデータが入っている要素...
-
【エクセル】測定時間がバラバ...
-
Accessで該当データにフラグを...
-
多量のSUMIF式を軽くしたい
-
[C言語] コメント文字列を無視...
-
メモ帳(テキストデータ)をExc...
-
Excelのマクロでワードのテキス...
-
C言語プログラム変更
-
配列の勉強をしています。使用...
-
ノイズの入った波形をきれいな...
-
VBAを使ってOutlookメール本文...
-
モジュラス103の算出方法について
-
ビットシフトについて
-
win7でvbsファイルが実行できない
-
EXCELVBAでSQLserverからデータ...
-
HTMLでテキストボックスで...
-
CString型の文字列連結について
-
GETはできるがPOSTができない、...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
教えて下さい
-
配列でデータが入っている要素...
-
【エクセル】測定時間がバラバ...
-
メモ帳(テキストデータ)をExc...
-
VBA 空白セルを削除ではない方...
-
多量のSUMIF式を軽くしたい
-
Excelのマクロでワードのテキス...
-
エクセルで2つの時系列のデー...
-
この行は既に別のテーブルに属...
-
VBAを使ってOutlookメール本文...
-
シーケンサにパソコンからアク...
-
EXCELVBAでSQLserverからデータ...
-
ブレーカー落ちで壊れたりしな...
-
[C言語] コメント文字列を無視...
-
オープンチヤットでデータ削除...
-
モジュラス103の算出方法について
-
javaでDBからデータを取ってき...
-
カンマからスラッシュに
-
VBA 毎日取得するデータを順番...
-
Android携帯をUSBメモリ代わりに
おすすめ情報