[Ludia-users 117] Re: 一回目の検索が遅い件

Back to archive index

Toshihiro Kano kanou****@nttda*****
2007年 10月 15日 (月) 17:57:30 JST


こんばんは、加納です。

幸坂からの回答とは別に・・・

> > SELECT COUNT(*) FROM tab;
> →(SQL1)とします
> 
> > SELECT COUNT(*) FROM tab WHERE col @@ '??????';
> →(SQL2)とします
> 
> [ケース1] マシン起動→SQL1→SQL2
> SQL1,SQL2共に遅い。
> 
> [ケース2] マシン起動→SQL2→SQL1
> SQL2は遅いが、SQL1は速い
> 
> SQL2のパターンも、PostgreSQLのデータ参照しているということでしょうか。
> とすれば、PostgreSQLもsennaもどちらも影響の原因になると
> いうことでしょうか。

SQL1のパターンも、PostgreSQLのテーブル部を参照します。
もし、COUNT(*)はインデックススキャンだという認識でのお
話であれば、それはPostgreSQLには当てはまりません。
PostgreSQLはインデックスも追記型のため、データ部を参照
しないと確実にその行が生きていることを保証できないため
です。(インデックスに無効フラグはあるが、無効フラグが
オフだからといって、有効とは限らない)

SQL1では、プランを確認しないとなんともいえませんが、
テーブルスキャンの可能性があります。その場合、シーケン
シャルアクセスです。

SQL2では、インデックス経由のアクセスですので、テーブル
はランダムアクセスです。SQL1<SQL2なのは、予想される結果
です。ケース2のSQL1だけ早いことの解釈にはなっていません
が。そのあたりはメモリとの兼ね合いのように思います。

根本的には、ヒット件数を削減していただくことしか対処はな
いように思います。20万件全件ヒットのLudiaアクセスが必須
だとしたら、かなりつらい要件です。




Ludia-users メーリングリストの案内
Back to archive index