【发布时间】:2017-01-05 19:19:12
【问题描述】:
我有一个包含大量条目的表和一个长度为 8 的 varchar 字段,表示不同的状态。只有大约 5 种不同的状态,比如说“STATUS1”、“STATUS2”……而且大多数时候它是 NULL。
当我索引该字段时,它并没有做太多,因为有很多相等的值,然后 postgres 不使用索引。
我的问题是:有没有办法索引这样的字段并使其更快?大多数时候我查询status IS NULL,我想我不能让它更快。但是如果我检查 status = 'STATUS1' 会怎样?
【问题讨论】:
-
如果你关心性能,我认为你应该考虑在这里使用整数而不是 varchars。如果状态名称很重要,您始终可以创建一个附属关系,其中包含从整数到状态名称的关联。
-
这完全取决于
where status is null将从结果中删除多少行。如果该条件只返回几行,那么 Postgres 将在状态列上使用索引。如果这是所有行中的大多数,则索引将无济于事(但值得尝试创建部分索引) -
我也有这个想法,但我宁愿保留 Varchar 字段。性能在这一点上并不重要,我只是想知道是否有一种我完全想念的常见方式。
标签: sql postgresql