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

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

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

  1. SELECT *
  2. FROM activation
  3. WHERE registration = '1312313'
  4. AND status = 'WORKING';

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

t2a7ltrp

t2a7ltrp1#

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

  1. create index activation_idx on activation(registration, status);

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

  1. create index activation_idx_partial
  2. on activation(registration)
  3. where status = 'WORKING';

相关问题