- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:副問い合わせの限界値はどれくらいなのでしょうか? )
副問い合わせの限界値はどれくらいなのでしょうか?
このQ&Aのポイント
- 副問い合わせの限界値について知りたいです。現在、サブクエリで出力される結果が平均でおおよそ1000件、最大10万件になる予定ですが、それに対して副問い合わせの実行はMySQLで可能なのか疑問です。
- また、テスト環境では10万件のテストデータを用意できないため、副問い合わせでのサブクエリ出力件数の限界値についても知りたいです。
- 副問い合わせの限界値やサブクエリ出力件数の制限について詳細な情報を教えていただけると助かります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
サブクエリの限界値とのことですが、実質限界はないと考えていいと思います。 プライマリーキーがあれば、intのプライマリーキーであれば、int限界値が限界ですが、それより多くの値を出力できるはずです。 サブクエリは、まずメモリ上でのテンポラリ・テーブル作成を試みます。 tmp_table_size値、あるいはmax_heap_table_sizeを超えると、ファイル上にテンポラリ・テーブルを作成します。 そのサイズは、OSのtmpdirのサイズを超えない限り作成可能です。 しかし、それよりも低い限界値はユーザーの我慢です。 WHERE b_field := ?c で固定値を指定しているにも関わらず、10万件ということは相当遅いレスポンスなのでは?と思ってしまいます。
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
回答No.1
インデックスさえきちんと設定されていればサブクエリでもいけそうな気がしますが 場合によってはinner joinなどで代替したほうが現実的かもしれません。 10万件単位のマッチが必要となるとチューニングを考えるとデータを併せてしまわないと パフォーマンスが出ない可能性もあります
質問者
お礼
御礼遅くなって申し訳ありません。 件数がボトルネックでパフォーマンスが出ないですか・・・。 そうしたら、 SELECT * FROM A_TABLE WHERE a_field in ( SELECT a_field FROM B_TABLE WHERE b_field := ?c ORDER BY CREATE_DATE LIMIT 0 , 100 ) ; などで100件絞込みを行うという形でいきます。 回答ありがとうございました。
お礼
ほぼ限界はなく、後はパフォーマンスとチューニングの問題なのですね。 回答ありがとうございます。 現在は、Ano.1さんの回答の御礼に書いたようなSQLで回避しようと思います。
補足
お二方とも、回答ありがとうございました。 回答を締め切らせて頂きます。 ポイントはお二人に差し上げたいのですが、 やむを得ずこの形にしました。 再度質問させて頂く際には宜しくお願い致します。