[pgsql-jp: 29783] Re: substring を使用した場合の検索結果について

ISHIDA Akio iakio @ pjam.jpweb.net
2003年 5月 2日 (金) 13:00:37 JST


こんにちは。石田@苫小牧市です。

"Hirokazu Matsumura" <matsumurah @ citizen.co.jp> wrote:
(2003/05/02 10:05)

> 皆様おはようございます。松村です。
> 仲村様、油井様返答有難う御座いました(^^)
> 
> > この場合は取り敢えず, 関数インデックスを使わなければならないと思いま
> す.
> > http://developer.postgresql.org/docs/postgres/indexes-functional.html
> >
> > コストの見積もりが,
> > cost=0.00..1191.36 rows=108 width=238
> > に対して, 実際の結果が
> > actual time=175.69..345.42 rows=1 loops=1
> > となっていますが, 統計情報の更新(analyze)は行ないましたか?
> > #SET STATISTICS xxして, より詳細な統計と取ったりもできます..
> >
> > 確か結構前のバージョンからか, vacuumとanalyzeは別になったとか聞いたよ
> うな
> > あと, vacuumも単にvacuumでなくて, _一度_, vacuum full(排他的ロックが
> かか
> > ります)すると
> > 物理的に縮小される(ケースもある)ので, 微妙に早くなるかも知れません.
> 
> 関数インデックスを以下のようにして作成してみました。
> 1.create index col2_substr on test1 (substring(cols,1,3))
> parse errorで怒られてしまいました(^^;

上記の URL にも書いてありますが、和訳では、
http://www.postgresql.jp/document/pg721doc/user/indexes-functional.
html
インデックス定義の関数は1つ以上の引数を取ることができますが、
定数ではなくテーブル列でなくてはいけません。

なので、例えば、

create function substr_1_3(text) returns text as 
'select substr($1, 1, 3)' language 'sql' with (iscachable, isstrict);

のような関数を定義して、

create index col2_substr on test1 (substr_1_3(cols))

としてやればうまくいくのではないでしょうか?

--
ISHIDA Akio<iakio @ pjam.jpweb.net>




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