我有兴趣了解有关postgres优化的更多信息。
如果您有查询示例
$('#container').on("click", ".class", function(e) {
some code
});
但是字段的所有值都为null。 随着表的增长或者优化阶段的确定(以某种方式不涉及传递整个表),字段上的索引是否仍会使查询更快,没有符合要求的值?
我问,因为我们有一个情况,我们有一个未经优化的简单查询(上面的表格和列没有被索引),虽然该表有一百万条记录,直到一天有一些真正的价值,但没有注意到被注射,突然一切都死了。
答案 0 :(得分:2)
如果field
的所有值都为null,则上述查询将始终不返回任何行,因为field = value
隐含field is not null
。 Null只能由is null
或is not null
运营商进行测试。
无论如何,索引(除了HASH和GIN之外的所有类型)都存储空值,因此可以改进filed is null
或field is not null
之类的查询。但这实际上取决于您的确切查询和值的分布。
答案 1 :(得分:0)
索引通常仅在 selective 时才有用,即只有相对较小比例的行与索引匹配时才有用。因此,通常一个列的索引将无法使用所有一个值(null或其他),因为顺序扫描会更快。
索引可能有用的另一个时间是,只能通过索引扫描从索引中完全满足部分查询。您可能无法使用全部为空的列来执行此操作,但如果启用仅索引扫描,则可以选择将该列合并到复合索引中一个使用频繁的查询。