• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VisualBasicでデータ検索プログラムを作成しています。)

VisualBasicでデータ検索プログラムを作成:高速な検索方法は?

このQ&Aのポイント
  • VisualBasicでデータ検索プログラムを作成しています。データ検索の速度で困っています。
  • データAとデータBの5万件のデータを効率的に検索する方法として、配列を使ってForループ+if文で検索する方法と、DBにデータを格納してSelect文を使って検索する方法の比較を行います。
  • どちらの方法がより高速に検索できるのか、太郎、花子、一郎などの金額を求めるための効率的なデータ検索処理を知りたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • layy
  • ベストアンサー率23% (292/1222)
回答No.1

DBがという前に、 どういうデータ状態にしてから検索するか、というものあると思います。 データA 太郎,いちご,スイカ 花子,スイカ,トマト 一郎,バナナ,りんご  ・  ・ で 「太郎」の「いちご」レコードのとき「いちご」を比較してヒット, 「太郎」の「スイカ」レコードのとき「いちご」を比較して違う、 →「スイカ」と比較してヒット、 これでは「スイカ」のとき「いちご」の比較が無駄になります。 データAの数は変わらないので まずは、 データBの比較対象件数をいかに減らすロジックにするか、 それによってDBだったり、プログラムでマッチングだったり、IF文だったり、 のように思います。 これらはコード化(並び替え)されてますか?。

k2mac
質問者

お礼

データBの件数は数万件あり、それの並び替えはしていません。 指摘いただけたように、検索対象件数を減らす努力がまだまだ足らないです。 質問のたとえでいえば、野菜、果物のグループ分けや、色、原産国?のようなわけ方でデータBを細分化することは可能ですね! 実際のデータも2+4+4桁で分解することも可能ですので、分解して検索する方法を試してみます。 データベースを使うことは一からの勉強となるため少し戸惑っていましたが、使わない方法でもいけそう?ですのでもう少しがんばってみます。 プログラムが完成したら、DBプログラムも作成し、比較してみます。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

noname#140971
noname#140971
回答No.3

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

k2mac
質問者

お礼

なにも考えないFor + If文ですと、検索10件に1秒程度かかっているようです。 3万件のデータで3000秒もかかってしまうので・・・待ってられないというのが現状でした。 たとえが食べ物でしたが、利用目的はシミュレーションですので、極力結果を速く得たいという気持ちからの質問でした。 質問のデータBの最適化でどれだけ早くなるか試してみて、それからDBも試してみたいと思います。データBの最適化はDBの検索にも有効だと思いますのでそちらをまず注力します。 回答ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

こんばんは。 そこまでわかっているのなら なぜご自分で試してみないのでしょう?

k2mac
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • [EXCEL] 「組み合わせパターン」の作成

    たとえば、 A列  B列 太郎 りんご 花子 バナナ    みかん とあった場合、 A列・B列 太郎・りんご 太郎・バナナ 太郎・みかん 花子・りんご 花子・バナナ 花子・みかん と言ったようにすべてのパターンを作成できるようにしたいのですが、 EXCELでこういうようなことはカンタンにできますか?

  • 言葉を並べる

    好きな食べ物は、りんごとみかんとバナナとイチゴとスイカです。 好きな食べ物は、りんご、みかん、バナナ、イチゴ、スイカです。 好きな食べ物は、りんご・みかん・バナナ・イチゴ・スイカです。 のどれが正しいですか?

  • すでにあるデータと同じものを把握したい

    古いデータに出てきたのと同じ物は、排除したいと思います。 例 シートの名前=折り紙 古いデータ ・いちご ・バナナ ・りんご ・かき ・メロン ・すいか あたらしいデータ ・いちご ・ぶどう ・りんご ・かき ・もも とあるとします。 新たにでてきた情報だけを抽出したいのです(できれば消えた情報も把握したい) この場合 ・いちご ・りんご ・かき が新旧で情報が重複します。これは排除したい。 ・ぶどう ・もも これは古い情報にはなく、新しい情報にあるので、これを把握したい こういった感じです。 調べて、countif関数でやっていました ところ 古いデータの段階で countif(c:c,いちご,バナナ,りんご,かき,メロン,すいか) とやってみて、新しいデータを追加したら、古いデータと重複するところには、所定のセルの書式(背景を黄色に設定)になって反映するのかと思えば、なんの反応もなく・・・ なにか構文がおかしいのでしょうか。あるいはもっと簡単な方法がありますか

  • エクセルでの重複データの抽出とフラグ

    エクセルでのデータの作成で困っております 下記のように「送り主」と「届け先」の重複データを抽出し数字を与えたいのですが、どうしてよいか判らず困っております。 教えて頂けますでしょうか ギフト配送先のデータ抽出 送り主     届け先  商品 田中太郎  1 佐藤花子(りんご1個) 田中太郎  1 佐藤花子(みかん1個) 田中太郎  1 佐藤花子(バナナ1本) 田中太郎  2 山本○子(みかん1個) 田中太郎  2 山本○子(バナナ1本) 山本○次  1 鈴木△子(りんご詰め合わせ) 山本○次  2 高橋×子(みかん詰め合わせ) 山本○次  3 田中□子(りんご詰め合わせ) 宜しくお願い致します

  • データ代入方法について

    以下のデータ内容の","と","の間にデータがない時は、"-"を代入する方法を教えてください。 (できれば、Solarisの標準コマンドで。) <data> user1,user1@mail.co.jp,taro,123-456,太郎, user2,,hanako,,花子, user3,,,一郎, <data変換後> user1,user1@mail.co.jp,taro,123-456,太郎, user2,-,hanako,-,花子, user3,-,-,-,一郎,

  • 複数の値を一度にUPDATEするには?

    既存テーブル(Aテーブル)から複数存在するデータのみを一度に、別テーブル(Bテーブル)にUPDATEしたいのですが可能でしょうか? 例 Aテーブル(idはAIです) id fieldI fieldII 1  太郎   1 2  花子   1 3  花子   1 4  一郎   1 5  太郎   1 Bテーブル(idはAIではない) id fieldI fieldII  10  太郎   2  ← ここを1から2へ変更 12  花子   2  ← ここを1から2へ変更 上記のようにAテーブルとBテーブルの列の構成は同じで、 fieldIは同じ値が格納されていますが、idは違っています。 上記のような場合、太郎と花子を同時にUPDATEするにはどのようにすれば、 良いのでしょうか? どなたか、お知恵をお貸し下さいませ。 DB:Mysql5以降 宜しくお願いします。

    • ベストアンサー
    • MySQL
  • 文章のルール

    次の例文の中で一番スマートな文はどれですか? ①私は、りんごやみかん、スイカ、いちごが好きだ。 ②私は、りんご、みかん、スイカやいちごが好きだ。 ③私は、りんご、みかん、スイカ、いちごが好きだ。 単語を並べるときのルールがあったような… 教えてください。

  • エクセル出の並び替えについて質問

    エクセルの並び替えにおいて質問させていただきます。  A列  B列  C列   D列 りんご  1  バナナ  4 バナナ  2  みかん  6 すいか  3  いちご  8 みかん  4  もも   3 いちご  5  すいか  2 ドリア  6  ぶどう  1 というものを  A列  B列  C列   D列 りんご  1   バナナ  2  バナナ  4 すいか  3  すいか  2 みかん  4  みかん  6 いちご  5  いちご  8 ドリア  6           もも   3         ぶどう  1 というようにA列にならってC,D列の項目を並び替えて、並び替えられないものは下に列挙させるようなやり方がありましたら教えてください。 どうぞ宜しくお願いします。

  • 同じ行の中で重複するデータを削除してつめる方法

       A    B    C     D      E    F 1|りんご|いちご|りんご|ぶどう|ばなな|りんご 2|すもも|ばなな| 3|りんご|りんご|びわ | 4|かき |りんご|ばなな| データが上記のように記入されている場合、 下記のように、同じ行の中で重複するデータを削除してつめる方法をご伝授ください。     A    B    C     D      E    F 1|りんご|いちご|ぶどう|ばなな|  2|すもも|ばなな| 3|りんご|びわ | 4|かき |りんご|ばなな| よろしくお願いします。

  • C#です。データの出力について

    C#です。 二次元配列に格納したデータをメモ帳に出力したいのですが、どうすればいいですか? 二次元なので、それぞれをカンマで区切って出力したいのですが、やり方がわかりません。教えて下さい(><) 例)りんご,1   トマト,2   バナナ,3   みかん,4 などの二次元配列をこのように、カンマで区切った状態で出力したいんです。できれば具体的にプログラムを教えていただけると嬉しいです。

最近のSNSでのマナーとは?
このQ&Aのポイント
  • 近年のSNS利用頻度や投稿内容において、人間の醜さが顕著になっている。
  • SNSの利用頻度が減少し、投稿内容も見る専に切り替える人が増えている。
  • SNS上で人を晒したり叩く人の心理状態についても気になる。
回答を見る

専門家に質問してみよう