[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 メーリングリストの案内