索引PostgreSQL中的空值

前端之家收集整理的这篇文章主要介绍了索引PostgreSQL中的空值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个查询的形式:
select m.id from mytable m
left outer join othertable o on o.m_id = m.id
    and o.col1 is not null and o.col2 is not null and o.col3 is not null
where o.id is null

查询返回几百条记录,尽管这些表具有数百万行,并且将永远运行(大约一个小时)。

当我使用以下命令检查我的索引统计信息时:

select * from pg_stat_all_indexes
where schemaname <> 'pg_catalog' and (indexrelname like 'othertable_%' or indexrelname like 'mytable_%')

我看到只有othertable.m_id的索引被使用,并且col1..3的索引根本没有被使用。为什么是这样?

我已经阅读了few places,PG一直不能为NULL值索引。但是,从PG 8.3开始,我已经看过这个改变了?我目前在Ubuntu 10.04上使用Postgresql 8.4。我是否需要专门制作“部分”或“功能”索引来加快IS NOT NULL查询,或者是否已经对NULL建立索引,我只是误解了这个问题?

你可以尝试部分索引:
CREATE INDEX idx_partial ON othertable (m_id)
WHERE (col1 is not null and col2 is not null and col3 is not null);

从文档:http://www.postgresql.org/docs/current/interactive/indexes-partial.html

猜你在找的Postgre SQL相关文章