#<#
新しい演算子、、、#<=#
を使用して、自然な順序( '1' <'2' <'10' <'11'など)を使用するテキストデータ型に独自の比較演算子を作成しまし#>#
た#>=#
。
次に、それらを演算子クラスに配置して、次のようにインデックスを作成できるようにします。
CREATE OPERATOR CLASS text_natsort_ops
FOR TYPE text USING btree AS
OPERATOR 1 #<#,
OPERATOR 2 #<=#,
OPERATOR 3 =,
OPERATOR 4 #>=#,
OPERATOR 5 #>#,
FUNCTION 1 bttext_natsort_cmp(text, text);
ただし、newを使用してインデックスを作成する場合、これは、が使用されるときに行われるため、text_natsort_ops
関連するクエリでは使用されません。like
text_pattern_ops
like
インデックスの使用を許可するように演算子クラスを宣言するにはどうすればよいですか?
アップデート:
上記はうまくいくようですので、質問は無効です。私の本当の問題は、次のようなクエリを使用したことでした。
select *
from mytable
where number like 'edi%'
order by number using #<#
limit 10
また、text_pattern_opsを使用した別のインデックスもありました。これは、はるかに高速に動作するように見えるため、プランナーによって選択されました。ただし、order by ... using
新しいopsを使用するインデックスのみが役立つため、他のインデックスは返される結果が多すぎるため、インデックススキャンでlimit句を使用できるようにする必要があります。