[pgsql-jp: 31997] Re: count が以上に遅い。

T.Suzuki t_suzuki @ kenwood-eng.co.jp
2004年 1月 13日 (火) 16:11:24 JST


鈴木@KEGと申します.

> > SQL文とテーブル構成を拝見して思ったアイディアを1つ.
> > 
> > もし,"flg"が 0 であるレコードが多ければ,
> > 
> > select count(*) from news_table 
> >   where flg=1 and message like '%日本%';
> > 
> > とする事で,コストがかかるLikeの実行を減らす事はできます.
> > news_tableの全レコードに対して,flg = 0が締める割合が大きければ
> > 効果があるはずです.
特に説明しませんでしたが,
and 以前の条件が成立した場合,式の評価が終了する事を
狙った小技でした.

> 質問なんですが、上記の条件式に関する評価というのは
> オプティマイザがよきにはからってくれたりはしないのでしょうか?
> 
Where句に,「A and B」といった式があったとして,
AとBのどちらを先に評価しても,結果は同じですが
オプティマイザがこの順序を変えるという話しは,聞いた事はありません.
# 勝手に変わったら,不具合になってしまうので...
単純に式の評価順(C言語とかと同じ)です.

> cardinalityとかを意識して、プログラマが評価順を
> 指定しないといけない??
>
A and B とするか,B and A に書き換えるかといった事は,
今回のように Likeや複問い合わせを含むSQLの場合に
実行時間が大きく変わる場合があったので注意しています.

逆にそれ以外の場合,単純な問い合わせなら意識していません.
# お答えになったでしょうか…
 -----------------------------------------
      鈴木 徹 (SUZUKI Toru)
      KENWOOD ENGINEERING CORPORATION
      E-mail:t_suzuki @ kenwood-eng.co.jp
 -----------------------------------------



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