postgres:通过varchar进行搜索,varchar在java中是enum

svujldwt  于 2021-08-01  发布在  Java
关注(0)|答案(1)|浏览(299)

我有一张table,我在table上查询 varchar 列。它可以是极少数可能的值之一(这是一个简单的javaenum)。
sql:

SELECT *
FROM   activation 
WHERE  registration = '1312313'
       AND status = 'WORKING';

我跑过来了 EXPLAIN ANALYZE EXECUTE https://explain.depesz.com/s/whuq,因为问题似乎出在按状态过滤中。上面有一个索引 registration 列。
在网站上加个索引合理吗 status 还是这里杀伤力太大了?如果是,如何优化给定的查询?

t2a7ltrp

t2a7ltrp1#

对于此查询,您需要对显示在 where 条款。把最严格的标准放在第一位通常是个好主意(在这里,我理解这是 registration ):

create index activation_idx on activation(registration, status);

如果你总是用同样的方法过滤 status 值,则部分索引可能至少同样有效,而且成本更低:

create index activation_idx_partial 
    on activation(registration) 
    where status = 'WORKING';

相关问题