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

matsuda yumatuda @ msoft.co.jp
2002年 9月 11日 (水) 19:38:19 JST


石井さんどうもありがとうございます。
いつもシーラカンス本にもお世話になっています(^^;

さて、ご教授いただいた件ですが、
Postgresの再インストールをし、--enable-locale外しました。
そして同じSQLを実行してみたところ、確かに検索速度が上がりました。
このような設定1つで速度に差が出てくるとは、さすがに驚きました。
外しておく事によるデメリットも今のところ耳にしないので、
これからは外しておこうかと思っております。
貴重なお時間を使っていただきありがとうございました。

まだまだ駆け出しですので色々ご迷惑をかけるかも知れませんが、
何卒宜しくお願いいたします。>ALL

Tatsuo Ishii <t-ishii @ sra.co.jp> wrote:

> 石井です.
> 
> > 過去の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 メーリングリストの案内