Ruby on rails 我想搜索2个字符,有什么解决方案吗?(三元索引仅适用于至少3个字符)
我在名字和姓氏列上有一个三元索引,我想搜索2个字符。我尝试在打开或关闭顺序扫描的情况下执行查询,并测量每种情况下需要多长时间,但这两种情况下都需要大量时间。有没有解决方案可以让我的2个字符搜索更快 在模式中,我有: t、 索引“(((名字)::text | |“”:text)| |(姓氏)::text)) gin\u trgm\u ops”,名称:“索引用户\u全名”,使用::ginRuby on rails 我想搜索2个字符,有什么解决方案吗?(三元索引仅适用于至少3个字符),ruby-on-rails,postgresql,performance,Ruby On Rails,Postgresql,Performance,我在名字和姓氏列上有一个三元索引,我想搜索2个字符。我尝试在打开或关闭顺序扫描的情况下执行查询,并测量每种情况下需要多长时间,但这两种情况下都需要大量时间。有没有解决方案可以让我的2个字符搜索更快 在模式中,我有: t、 索引“(((名字)::text | |“”:text)| |(姓氏)::text)) gin\u trgm\u ops”,名称:“索引用户\u全名”,使用::gin 我不认为有什么内在的东西可以做到这一点。您可以创建一个函数,将文本转换为bigram数组(决定如何处理空格、标点
我不认为有什么内在的东西可以做到这一点。您可以创建一个函数,将文本转换为bigram数组(决定如何处理空格、标点符号、非ASCII码等),然后对该数组进行索引,并使用
&&
运算符进行查询。但是,除非您的两个字符类似于'qz',否则您可能无法获得足够的选择性,从而使索引具有价值
create function bigram(text) returns text[] language sql as $$
select array_agg(substring($1,x,2)) from generate_series(1,length($1)-1) f(x);
$$ immutable;
create index on foobar using gin (bigram(t));
select * from foobar where bigram(t) && bigram('aa');
顾名思义,三元图是3个连续字符。你想从2个字符开始,因为很明显,潜在的结果非常复杂。我的问题是:我应该使用什么索引来帮助我搜索2个字符?