タイトル : 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文でも速くなるでしょうか? よろしくお願いします。 |