postgres,如果列中的所有行都为null,索引是否仍能提高性能?

时间:2015-10-08 08:23:39

标签: postgresql optimization

我有兴趣了解有关postgres优化的更多信息。

如果您有查询示例

$('#container').on("click", ".class", function(e) {
      some code
});

但是字段的所有值都为null。 随着表的增长或者优化阶段的确定(以某种方式不涉及传递整个表),字段上的索引是否仍会使查询更快,没有符合要求的值?

我问,因为我们有一个情况,我们有一个未经优化的简单查询(上面的表格和列没有被索引),虽然该表有一百万条记录,直到一天有一些真正的价值,但没有注意到被注射,突然一切都死了。

2 个答案:

答案 0 :(得分:2)

如果field的所有值都为null,则上述查询将始终不返回任何行,因为field = value隐含field is not null。 Null只能由is nullis not null运营商进行测试。

无论如何,索引(除了HASH和GIN之外的所有类型)都存储空值,因此可以改进filed is nullfield is not null之类的查询。但这实际上取决于您的确切查询和值的分布。

答案 1 :(得分:0)

索引通常仅在 selective 时才有用,即只有相对较小比例的行与索引匹配时才有用。因此,通常一个列的索引将无法使用所有一个值(null或其他),因为顺序扫描会更快。

索引可能有用的另一个时间是,只能通过索引扫描从索引中完全满足部分查询。您可能无法使用全部为空的列来执行此操作,但如果启用仅索引扫描,则可以选择将该列合并到复合索引中一个使用频繁的查询。