最も早いデータ抽出方法について


たもりね  2005-11-12 09:27:05  No: 127613

こんばんは

VB6です。

複数条件に一致したデータを抽出したいのですが、
もっとも早い方法とはどんなものでしょうか?
データベースはMDBです。

今は、

      ・
      ・
      Do Until myRst.EOF
           
          key1 = myRst.Fields("A_ddd")
          key2 = myRst.Fields("B_sss")

          If key1 = 0 And k_key4 = -1 Then
              With Me.ListView1.ListItems.Add  
                    .Text = myRst.Fields("C_ww")
                    .SubItems(1) = myRst.Fields("D_xx")
              End With
          End If
          myRst.MoveNext
      Loop

のようにしてリストビューにデータを
表示させています。

宜しくお願いします。


たもりね  2005-11-12 09:29:12  No: 127614

>If key1 = 0 And k_key4 = -1 Then
    ↓
If key1 = 0 And key2 = -1 Then
でした。


Geo=TK3  2005-11-15 22:07:09  No: 127615

VB6 と MDB だから DAO 使ってると想定。
とりあえず MDB から全レコードを取得して VB 側で判断するよりは、はじめ
から条件を絞り込んだレコードセットを作成した方が早い気はする。

      Set myRst =... '(SELECT C_ww,D_xx From 〜 Where A_ddd=0 And B_sss=-1)でレコードセット作成
      Do Until myRst.EOF
          With Me.ListView1.ListItems.Add  
                .Text = myRst.Fields("C_ww")
                .SubItems(1) = myRst.Fields("D_xx")
          End With
          myRst.MoveNext
      Loop

てな感じでループ内での条件判定がなくせるから。
もっとも実測はしてないので参考程度にどうぞ。


ひろ  2005-11-16 01:03:37  No: 127616

オブジェクトの間接参照をループの外に出しましょう。
Filedsコレクションからフィールド名が "C_ww" のものと "D_xx" のものを探す処理がレコードセットの行数と同じ回数だけ実行される必要はないはずです。


Dental  2005-11-16 02:27:17  No: 127617

データ全体の抽出時間ではなく、表示までの時間を重視するのであれば、
仮想リストビュー(Virtual ListView)も検討対象になるかも知れませぬ。
Virtual ListViewなら、数百万件のデータも一瞬で表示できますしね。

# APIを使うので、多少の手間はかかるけど……。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加