• ベストアンサー

IN( )の中に、項目をたくさん入れたら処理が重くなってしまう

MySQLで↓このような、処理をしたいんですが select TABLE_A.* from TABLE_A where TABLE_A.id in (select TABLE_B.TABLE_A_ID from TABLE_B ) このように、INの中にサブクエリを入れてるんですが、 ものすごく重くなってしまい、検索されるまでに通常の数倍かかってしまいます。 サブクエリの該当件数は30件ほどで、これからも増えて行く予定です。 サブクエリ発行部分を in (1,2,3…29,30)と 生書きしても、やや重く、どうやら、inの中に項目を やたらたくさん入れると重くなるみたいです。 このようなINの項目が無数に増えても、 処理をより軽くするには、どうすればいいのでしょうか?

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

これはINNER JOINではだめなんですか? select TABLE_A.* from TABLE_A INNER JOIN TABLE_B ON TABLE_B.TABLE_A_ID=TABLE_A.id 適当にインデックスを付けておけばかなり速いはずですが・・・

yuzuru0024
質問者

お礼

回答有難うございます。 INNER JOINを利用して、作成した所 大変軽い動作で同じものを作ることができました!

その他の回答 (1)

noname#140971
noname#140971
回答No.2

<tabA> ID__fld1____fld2 1___aaa1___bbb1 2___aaa2___bbb2 3___aaa3___bbb3 <tabB> ID__tabA_ID___fld1______fld2 1___________1___1111a___2222a 2___________2___1111b___2222b [イミディエイト] ? DBSelect("select * from tabA where tabA.id in (select tabA_ID from tabB);") 1;aaa1;bbb1; 2;aaa2;bbb2; ? DBSelect("select tabA.* from tabA inner join tabB on tabB.tabA_id=tabA.id") 1;aaa1;bbb1; 2;aaa2;bbb2; さて、これは Access2003 でのテストです。 問題は、MySQL が inner join をサポートしているかです。 INNER JOIN 操作: 2 つのテーブルの共通するフィールドに同じ値があった場合に、両方のテーブルのレコードを結合します。 http://dev.mysql.com/doc/refman/4.1/ja/join.html 注意:INNER JOIN 構文で join_condition を使用できるのは、MySQL 3.23.17 以降に限られます。同様に、JOIN と CROSS JOIN に関しても、MySQL 4.0.11 以降でのみ条件を指定できます。

yuzuru0024
質問者

お礼

回答有難うございます。 INNER JOINを利用して、作成した所 大変軽い動作で同じものを作ることができました!

関連するQ&A