[Seasar-user:5095] Re: [S2Dao]SQL のスタックトレース取得について
MORISHITA Minoru
[E-MAIL ADDRESS DELETED]
2006年 11月 14日 (火) 16:20:54 JST
ひがさん
詳細なご説明ありがとうございます。
> バインド変数がバインドされる前のSQLは、ほぼSQLファイルと同じものです。
>
> コンソールに表示されているSQLを実行すると
> 結果が早く返ってくるのですが、S2Daoを通してSQLを実行すると
> 極端に遅い現象が発生するというのは、
> バインド変数によって実行プランが変わってしまうためです。
>
> これに対応するためには、ヒントを使って特定のインデックスを
> 使うようにするか、埋め込み変数(/*$ ... */)を
> 使って変数を直接文字列としてSQLに埋め込んでください。
> 変数が文字列の場合は、''で囲むことも必要です。
> なお、埋め込み変数を使った場合には、SQLインジェクション対策を
> 自前でしてください。
> 実行プランに関係のなさそうな項目を1つぐらい選んで普通のバインド変数に
> すれば、SQLインジェクション対策は不要です。
>
> よろしくお願いします。
>
上記の対応で回避することに致します。
また、早速埋め込み変数を使用し、気づいた点がありましたので
ご報告させていただきます。
"?" が入ってしまうとArrayIndexOutOfBoundsExceptionのエラーになってしまい、
エスケープすることもできないのですが、"?"が検索条件として入ることは
想定されてないのでしょうか。
お手数ですが、よろしくお願い致します。
Seasar-user メーリングリストの案内