[pgsql-jp: 27374] Re: --enable-localeと検索速度の関連

Tatsuo Ishii t-ishii @ sra.co.jp
2002年 9月 10日 (火) 23:38:04 JST


石井です.

> 過去のMLで、--enable-localeを付けていると検索速度が遅くなる。
> と言うのを拝見したのですが、これはどういうことなのでしょうか?
> 現在、複数のテーブルをJOINし、帳票の出力などを行っているのですが、
> 条件によっては数分かかってしまうこともあります。
> 単純に--enable-localeをとるだけで検索速度の向上が望めるのでしょうか?
> また、よろしければなぜそうなるのか?などをご教授いただけると幸いです。

--enable-localeを取ると*劇的に*速くなるのは,関連する列が以下のケース
に限られます.

o 文字列型のデータ型である
o Btreeインデックスが定義してある
o 前方一致検索を行う

このような場合,PostgreSQLは

	foo LIKE 'a%'

のような問い合わせを

	foo >= 'a' AND foo < 'b'

のように書き換えてインデックスが使えるようにします(この説明は正確では
ありません.あくまでイメージです).この結果,劇的に高速化するわけです.

ところが,locale を使うようなケースでは,一般に「'a'よりも大きい文字」
を探すのが困難であるため,このような書き換えを行うことができず,インデッ
クスが使われないので遅くなってしまうわけです.

もっとも,PostgreSQLでは,日本語を扱う限りにおいては,どのみち locale 
は意味無いですから,オーバヘッドを減らすためにも常に locale を無効にし
ておくのがよいでしょう.過去一部の Red Hat系のLInuxディストリビューショ
ンでは,ロケール処理がバグっていて,--enable-locale が有効な 
PostgreSQL を使うと,遅いどころか*誤った*検索結果が返るという,とんで
もない問題を抱えているものもありました.
--
Tatsuo Ishii



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