[Seasar-user:19897] Re: [S2JDBC] h2database利用時のAutoSelect<T>.getCount()の挙動について

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2010年 6月 22日 (火) 18:10:43 JST


小林 (koichik) です.

Date:    Tue, 22 Jun 2010 17:41:04 +0900
From:    TAKEUCHI Hideyuki <[E-MAIL ADDRESS DELETED]>
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:19896] [S2JDBC] h2database利用時のAutoSelect<T>.getCount()の挙動について

> h2databaseは"count(*)"を呼び出した際は高速にカウントを
> 取得できるようになっているとマニュアルに記載されているのですが、
>   jdbcManager.from(Entity.class).getCount()
> を実行すると
>   select count(T1_.ID) from ENTITY T1_
> が発行されてしまって最適化が効きません。
> 
> この挙動を簡単に変更することは可能でしょうか?

selectBySql() または selectBySqlFile() を
使ってください.

> あと、AutoSelect<T>.getCount()のjavadocに
>   SELECT COUNT(*)の結果である行数を返します。
> と書かれており実際に実行されているSELECT COUNT(id)と
> 処理の内容が異なっているように思えます。

「論理的には」同じということで.
RDBMS によっては count(*) の方がインデックスが
使われずに遅くなるケースもあったりしたはずなので,
どちらが適当かはケースバイケースになると思います.


-- 
<component name="koichik">
    <property name="fullName">"Koichi Kobayashi"</property>
    <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
    <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>



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