タイトル | : ADO のJOIN数の実質上限? |
記事No | : 15062 |
投稿日 | : 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文でも速くなるでしょうか?
よろしくお願いします。
|