我创建了一个使用自然排序("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);
Run Code Online (Sandbox Code Playgroud)
然而,当我创建一个使用我的新的指数text_natsort_ops
,在此不涉及查询中使用like
,因为它的时所做的text_pattern_ops
使用.
如何声明我的运算符类以允许like
使用我的索引?
更新:
以上似乎有效,所以问题无效.我真正的问题是我使用了如下查询:
select *
from mytable
where number like 'edi%'
order by number using #<#
limit 10
Run Code Online (Sandbox Code Playgroud)
我还有另一个使用text_pattern_ops的索引,这是由计划者选择的,因为它似乎工作得更快.但是,由于order by ... using
只使用我的新操作的索引将是有用的...另一个索引返回太多结果,我需要限制子句可用于索引扫描.
以上似乎有效,因此该问题无效。我真正的问题是我使用了如下查询:
select *
from mytable
where number like 'edi%'
order by number using #<#
limit 10
Run Code Online (Sandbox Code Playgroud)
我还有另一个使用 text_pattern_ops 的索引,它是由规划者选择的,因为它似乎工作得更快。但是,由于 order by ... 仅使用使用我的新操作的索引将很有用...其他索引返回太多结果,并且我需要 limit 子句可用于索引扫描。
归档时间: |
|
查看次数: |
735 次 |
最近记录: |