[groonga-dev,03877] Re: PGROONGAでの等価条件&不等価条件の指定方法

Back to archive index

Kouhei Sutou kou****@clear*****
2016年 1月 28日 (木) 16:35:03 JST


須藤です。

In <20160****@orega*****>
  "[groonga-dev,03875] Re: PGROONGAでの等価条件&不等価条件の指定方法" on Wed, 27 Jan 2016 09:57:22 +0900,
  高見 直輝 <takam****@orega*****> wrote:

> まず、本件と並行している
> [groonga-dev,03867] Re: PGRNファイルが開けない?
> に対する返信を21日に行ったのですが、ログファイル添付によるサイズ制限超過
> で承認待ちの状態になりました。
> 先ほど添付ファイルをZip圧縮して再送しましたが、ウィルススキャンなどに引っ
> かかる可能性があるのでご注意ください。

届いていました。

森さん、添付ファイルの最大サイズを増やしてもらえないでしょう
か?500KBくらいまで増やしてもいいんじゃないかと思います。

> 以下の構文で間違いないでしょうか?
> CREATE INDEX インデックス名 ON テーブル名 USING pgroonga
> (lower(カラム名) pgroonga.varchar_ops);
> 動作することは確認したのですが、念のため。

はい、間違いありません。

> テーブル名を変えて下記SQLを実行したところ、下記と同じ結果になりました。
> 問題が発生しているテーブルでは相変わらずの状態なので、テーブルに登録され
> ているデータの内容が原因のようです。

あぁ、

----
SET enable_seqscan = off;
SET enable_indexscan = on;
SET enable_bitmapscan = off;
----

として「いない」ときにシーケンシャルスキャンになるということ
ですか。それはありえます。

> ※総数2万レコード、このうち1万5千程度が『\st\新しいフォルダー』で始まる。
> %%と@@でインデックスを使用するかどうかの境界が異なる、ということでしょ
> うか?

----
SET enable_seqscan = on;
SET enable_indexscan = off;
SET enable_bitmapscan = off;

EXPLAIN
SELECT path
  FROM TEST_TABLE
 WHERE lower(path) @@ lower('\\st\\新しいフォルダー');
----

の結果と

----
SET enable_seqscan = off;
SET enable_indexscan = on;
SET enable_bitmapscan = off;

EXPLAIN
SELECT path
  FROM TEST_TABLE
 WHERE lower(path) @@ lower('\\st\\新しいフォルダー');
----

の結果を比べてみてください。

注目するのは

----
 Index Scan using test_table_path on test_table  (cost=0.14..8.16 rows=1 width=32)
----

とでているうちの

----
cost=0.14..8.16
----

の部分です。

PostgreSQLはこのcostが小さい検索方法を使います。そして、これ
はレコード数などデータによって変わります。

もし、シーケンシャルスキャンのときに

----
 Seq Scan on test_table  (cost=0.00..367.00 rows=1 width=32)
----

となっていたら、これはコストが「367.00」でインデックススキャ
ンの「8.16」よりも大きいです。そのため、この場合はコストが小
さいインデックススキャンを選びます。

もちろん、逆になっていたらシーケンシャルスキャンを選びます。


たぶん、%%の方が@@よりもコストが大きくなっているんだと思いま
す。どうしてそうなっているかはわかりませんが。。。

@@はPostgreSQL標準で組み込まれている演算子なので、そっちの演
算子としてコストが計算されているのかもしれません。


-- 
須藤 功平 <kou****@clear*****>
株式会社クリアコード <http://www.clear-code.com/>

Groongaベースの全文検索システムを総合サポート:
  http://groonga.org/ja/support/
パッチ採用 - プログラミングが楽しい人向けの採用プロセス:
  http://www.clear-code.com/recruitment/
リーダブルコードワークショップ:
  http://www.clear-code.com/services/code-reader/readable-code-workshop.html




groonga-dev メーリングリストの案内
Back to archive index