tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル ADO のJOIN数の実質上限?
投稿日: 2010/12/15(Wed) 09:18
投稿者IMA
VB6の問題でなく、ADO SQLの質問になりますが、宜しければ
ご教示ください。
→ 不可なら投稿削除させていただきます。

下記のテーブルが有るとします。AccessMDB形式です。
■ T_Index
 index:長整数・・1〜1000まで

■ T_Data01 〜 T_Data20
 index:長整数・・1〜1000まで
 Flag:長整数(実質 0 又は -1)

この、T_Index と T_Data01 〜 T_Data20のデータを
下記のような横に繋げた一覧表を作製しようとしています。

index    T_Data1.Flag    T_Data2.Flag・・・T_Data20.Flag

ADODB.Recordsetの利用ですが、T_Dataを14個程度までは、殆ど
時間を気にせずに開くのですが、→ 1sec以内?
それから加速度的に遅くなり18個繋げると60sec位にもなります。

下記コードは実データを少し直してありますので書き損じがあるかも(汗

Dim rs As adodb.Recordset

        Set cn = New adodb.Connection
        cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                        "Data Source=" & sPath & ";" & _
                        "Extended Properties='Text;HDR=NO'"

        sQuery = "SELECT T_Index.index"
        For n = 0 To 19        '14個程度までは遅くない!
            sQuery = sQuery & ", T_Data" & Format(n + 1, "00") & ".Flag"
        Next
        sQuery = sQuery & " FROM " & String(19, "(")
        sQuery = sQuery & "T_Index LEFT JOIN T_Data01" & _
                          " ON T_Index.index = T_Data01.index"
        For n = 1 To 19
            sQuery = sQuery & ") LEFT JOIN T_Data" & Format(n + 1, "00") & _
                     " ON T_Index.index = T_Data0" & Format(n + 1, "00") & ".index"
        Next
        sQuery = sQuery & ";"

        Set rs = New adodb.Recordset
        rs.Open sQuery, cn

ちなみに、Access2003のクエリ窓?で処理するとDAO?の為か1/10位の時間ですが
遅くなることに変わり有りません。

また、クエリを2に分けて記載し、その2つをJOINしたところ大幅に処理速度が
向上しました。→ 1sec位?

SQL文の見直しで1つのSQL文でも速くなるでしょうか?

よろしくお願いします。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。