[Seasar-user:12500] Re: [S2JDBC]SQL 自動生成 カウントとヒント句

Yasuo Higa [E-MAIL ADDRESS DELETED]
2008年 1月 15日 (火) 10:32:19 JST


ひがです。
> 
> はじめまして、片岡といいます。
> 
> 自分のプロジェクトでSeasar2を使えないか検討を始めてみたのですが、
> DBアクセスまわりは、S2JDBCが今までのプロジェクトのやり方の延長線上で
> 実施できそうなので、気に入っています。
> 
> ただ、「SQL自動生成」機能に関して、ちょっと調べてわからなかったので、
> 2点ほど、機能が存在するかどうか教えてほしいです。そういった機能がない
> ようであれば、今後のエンハンスで対応を検討いただきたいのですが。
> 
> 
> 1)ページング前の件数取得に関して
> 
> ウェブページなどで、総件数を表示して、うち1−20件表示というような
> ページをよく見かけます。僕らがやっている実装としては、SELECT COUNT(*)
> でまず件数を取得して、ほぼ同様のSQL(ページング実施)で、SELECT以下を
> カラム名を変えた形でのSQLを発行するという手段をとります。
> 
> ただ、「SQL自動生成機能」では、検索件数をかえすようなメソッドがどうしても
> 見当たりませんでした。
>  とりあえず、自動生成をつかわずに対応できなくはないのですが、件数カウント
> も自動生成で対応できれば、より楽なのに、と思わずになりません。
> 
> getCount()のようなカウントがとれるようなメソッドがあれば、非常に楽だと思うし、
> SELECT配下を書き換えるだけなので、実装もそれほど難しくない気がするのですが...
。
> 
> Integer count = jdbcManager
>          .from(Employee.class)
>         .getCount();
>
前向きにコミッタ間で検討します。
> 
> 2)ヒント句の追加
> 会社のプロジェクトではORACLEを使うことが多いのですが、どうしても、大きな表の
> 検索の場合、実行計画が安定しないケースもあり、ヒント句を多用しています。
>  
> 「ヒント句が必要なものなんて、外だしSQLじゃなきゃ書けないような複雑なSQL
> じゃないの?」といわれそうですが、メインで使うような大きなテーブルには
> いっぱいINDEXがはられていて、こちらの思い通りのINDEXを使ってもらえずに、
> INDEXのヒントをいれるというケースが大体のパターンです。
> 
> これも外だしSQLにすればできると思うのですが、だいたい、ヒント句をはるのは
> カット・オーバーして運用フェイズに入ってしまった後ですから、せっかく自動生
> 成で作っていたSQLを外だしファイルにかえなければならないとか、結構面倒くさ
> いなーと思った次第です。
> 
> ORACLEユーザの視点では、ヒント句はSQL分のコメントでしかないので、SQLコメント
> 追加機能(SELECT文の直後に/*    */をいれてもらえる)さえあれば、それで汎用
> 的に利用できる気がします。
> (MySQLとかではダメですね? SQL文内にきちんとヒント句をかかなきゃいけない
> ようなので...)
> 
> イメージは以下です。
> 
> List<Employee> results =
>     jdbcManager
>         .from(Employee.class)
>         .comment("+ index(T1_  index1) ")
>         .getResultList();
> 
JPAでもhintを設定できるようになっているので、
こちらも前向きに対応したいと思います。

よろしくお願いします。


Seasar-user メーリングリストの案内