[pgsql-jp: 34497] Re: JDBCとavg____ _関数

koyama mlac @ hintmark.com
2004年 12月 16日 (木) 01:09:03 JST


k7-koyama です。

平野さん、何度もご丁寧にありがとうございます。

>
> >jdbc だと 64bit の double で計算するので、遅くなるのでしょうか??
>
> 私の環境(ADO-ODBC 7.05.00.02)では目立った実行時間の差異は見受けられ
> ませんでしたので、テスト結果と共にお知らせします。
> 私のテスト方法が的を射ていないかも知れませんが、jdbc接続ではだいぶ
> 違うんでしょうか・・・。
>

私も最初は、件数の問題、及び、 outer join などの問題かな
ともおもいましたが、違いました。

適当なテーブルを作成して、1行のみのレコードで、

select avg(カラム名) from テーブル  

をやっても、同じように遅いのです。

これはもう、jdbc(ant)コンパイルに問題があるjdbcドライバーのjar 
ファイルを作成したか、遅いのが正常の動作 の2つに1つだと思います。
(configure した時は、成功したように思えましたし、その後の テストと言うんで
しょうか、 make check も ちゃんと全部通ったので安心していましたが、
どっかおかしい所を見過ごしていたのかもしれません)

select sum(カラム名) from テーブル  や
select count(カラム名) from テーブル  や
select cast(カラム名 as float4) from テーブル  や
select cast(カラム名 as float8) from テーブル  

は、即座にかえってくる
事から、やはり、avg の データ型 と jdbc の平均値計算ロジック
が返す型あってないのが原因というか、そのような動作の場合は、
「どの型で返すかわからないよーー」と思いながら、 jdbc が動いて
いるのが、原因のような気がします。

そこで、 「as float4 で 返せ」とか 「as real で 返せ」 と
指定してやると、迷わずに返してくれるのではないかと考えています。

または、私の利用している KERNEL2.6 という環境での JAVA の動作は、
まだ安定していないのかもしれません。

ちなみに、JDKのバージョンは、1.4.2_05 でコンパイルしたと思います。
だいぶん前ですが、jdkで、カーネルのスレッド違反の問題がSunで指摘
されていたので、関係あるかもしれませんね。

只、今回は、real, float4, float8 のいずれかを指定する事で、
素早く返答してくれますし、小学生でもできるような計算しかさせない
ので、これでOKなんです。

Postgresは、jdbc3 をサポートしていますので、私が利用したい範囲の
apiの機能は、十分過ぎるほど利用可能ですので、満足しています。

DB2も手元にあるのですが、機能としてサポートしているのに
DBシステム自体が落ちてしまったり、ディストリビューションは
RedHatXX のみ だったりした事があって、それ以来嫌気がさして、
Postgres一辺倒だったりします。

欲を言うと、javadoc が ソースについていれば、うれしいのですが....









pgsql-jp メーリングリストの案内