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