アプリ版:「スタンプのみでお礼する」機能のリリースについて

DB:Oracle9i
SQLのIN句のカッコ内は、何個まで書けるなど、制限はあるのでしょうか?
PRO_KEY = IN (no1, no2, no3・・・)など、カッコ内が可変で、数百個、もしくは数千個ある場合、IN句を使用しデータを一度に取得するのではなく、PRO_KEY = no1のSELECT処理を発行、PRO_KEY = no2のSELECT処理を発行・・・し、ARRAYに検索結果を1つずつ詰めていく方が良いのでしょうか?

初心者で恐縮ですが、どなたかご教授ください。

A 回答 (3件)

1000個以上のデータをin句に入れるよりは、いったん一時テーブルに格納して、副問い合わせにしたほうがいいのでは。

    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2008/10/07 00:25

INの指定は1000個までなので、


”IN(1000個) OR IN(1000個)”
などと、1000個づつORで区切ると良いです。
パフォーマンス的には、1件づつSELECTは圧倒的に遅くなります。
なぜなら、テーブル(もしくはインデックス)をSELECTのたびに検索するからです。
IN指定方式ならば、テーブル(もしくはインデックス)をなめるのは一回で済みます。件数が多いほど、顕著に差が出そうですね。

また、SELECTを何のプログラムから発行しているかにもよりますが、1回1回のSQL発行によるオーバヘッド(通信・wait時間)なども、回数が多くなると蓄積して大きなものとなるので、SQL発行回数自体も多くなりすぎないよう配慮が必要となります。

可能ならば、一度両方バージョン作ってみて時間を比較されると勉強になって良いと思いますよ。トレースも取ってみてみると良いと思いますわ。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2008/10/07 00:24

こんばんは。



IN句の中に入れることのできる要素数の限界は1000個です。以前、この制限に引っかかったことがあって、1000個ずつ取ったことがありました。
SELECT文を大量に投げるのはちょっと負担になるような。

それ以前にIN句はあまり使いたくないですよね。

この回答への補足

ご回答ありがとうございます!
ORの方が良いのでしょうか?
要素数が可変の場合は、普通はどうするのでしょうか?
ORを使用して、ORの条件文が数百?数千?になるのと、SQLを一回一回発行するのとでは、どちらが良いのでしょうか?

補足日時:2008/02/05 22:23
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す