私のPL/SQLには、この大きな動的SQLがバインド変数を使用しています。 DBMS_SQLパッケージを使用して、生成された問合せをバインドおよび実行します。LIKE%演算子でバインド変数を使用する
特定の条件に基づいて、where句が動的SQLに追加されます。バインド変数にマッチするために "in"または "="を使用すると、すべて正常に動作し、結果はかなり速く返されます。
例:
(servedparty = :bv_ or servedpartyimsi = :bv_)
しかし、私は次の操作を実行したとき:
(servedpartyimei like :bv_)
とクエリは非常に非常に非常に長い時間を要する12345679890%のような価値を提供します。
は、私はまた、「%」なしに価値を提供しますが、私はバインド変数なしでクエリを実行すると、それは同じ結果 を与え、この(servedpartyimei like :bv_||'%')
と同じようsomehtingを試みたが、ハードコードされた値を置くだけで、結果も即座に返されます。
ここで何か問題がありますか? LIKE演算子のような変数をバインドしないでください。 アイデア
ありがとうございます。
どのデータ型が 'servedpartyimei'ですか?あなたは数字の検索値を表示しています(これはIMEIであると思いますが、文字列として扱っています)。使用しているOracleのバージョンを示すことも重要です。速くて遅いバージョンの実行計画を見ることができますか? –
imeiは文字列としてデータベースに格納されます。データベースのバージョンは11.2 – Tijs
まだ実行計画を見て、それが何をしているのかを確認する必要があります。おそらく、他の(索引付けされた)列にもフィルターがあり、それがより適切と思われるか、または他の理由で予想している索引を使用していない可能性があります。私たちはそれが何をしているのか本当に推測することはできません、あなたが知る必要があります。 –