在postgresql 9.4的查询中,在where条件中使用多个OR运算符时,使用pg_trgm模块的索引不起作用

在postgresql 9.4的查询中,在where条件中使用多个OR运算符时,使用pg_trgm模块的索引不起作用,postgresql,indexing,postgresql-9.4,jsonb,Postgresql,Indexing,Postgresql 9.4,Jsonb,在where条件下使用多个或运算符时,使用pg_trgm模块编制索引不适用于我。查询如下 EXPLAIN ANALYZE SELECT * FROM registration where data->>'firstName' LIKE '%lali%' OR data->>'spouseName' LIKE '%lali%' OR data->>'vhnName' LIKE '%lali%' OR data -

where
条件下使用多个
运算符时,使用pg_trgm模块编制索引不适用于我。查询如下

EXPLAIN ANALYZE 
SELECT * 
FROM registration 
where 
    data->>'firstName' LIKE '%lali%' OR  
    data->>'spouseName' LIKE '%lali%' OR  
    data->>'vhnName' LIKE '%lali%' OR 
    data ->> 'subCentreName' LIKE '%lali%'
当我运行上面的程序时,我得到了序列扫描,但我希望索引扫描会发生

我正在使用JsonB

我对上面查询中的
where
子句中提到的所有列尝试了gist和gin索引,但索引对这两个列都不起作用


如果我们在
where
子句中使用多个
运算符,如何为案例建立索引?

%
开头的模式在索引搜索中毫无价值,因为它可以从任何东西开始。

%
开头的模式在索引搜索中毫无价值,因为它可以从任何东西开始。

我可以找到该索引扫描适用于查询-解释选择*从注册,其中数据->>firstName,如'lal%'或数据->>spoosename,如'%lali%'。但是,当我在where子句-explain select*中添加一个或多个条件时,数据->>'firstName'如'lal%'或数据->>'spoosename'如'%lali%'或数据->>'subcentername'如'%lali%',索引扫描不起作用,而是进行顺序扫描。我对这种行为感到有点困惑。我可以发现索引扫描用于查询-解释选择*从注册,其中数据->>“firstName”如“lal%”或数据->>“spoosename”如“%lali%”。但是,当我在where子句-explain select*中添加一个或多个条件时,数据->>'firstName'如'lal%'或数据->>'spoosename'如'%lali%'或数据->>'subcentername'如'%lali%',索引扫描不起作用,而是进行顺序扫描。我对这种行为有点困惑。