空值的非选择性部分索引

时间:2014-03-25 14:15:07

标签: postgresql indexing query-optimization postgresql-9.3 partial-index

我刚刚在我的数据库中找到了一个有趣的部分索引:

CREATE INDEX orders_idx
  ON orders
  USING btree
  (status)
  WHERE status IS NULL;

如你所见,它完全没有选择性且完全无用,或者我错过了什么?

1 个答案:

答案 0 :(得分:0)

如果您有按状态筛选的查询为null(如注释中所述)或需要对状态为null的条目运行维护,则此索引可能很有用。

例如,从我以前工作过的项目(没有这种类型的索引),我有一个导入过程来保存日志/队列。它将状态设置为在启动时运行,在运行时运行,并在完成时将状态设置为完成 - 但如果出现错误则将其设置为null。这将需要清理,因为其他表中的项目将无法正确设置为所需的值。我需要定期查询状态为null以诊断特定问题,或运行清理脚本,以便数据库不会充满部分导入。