je une requête de la forme:indexation valeurs NULL dans 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
La requête renvoie quelques centaines de dossiers, bien que les tables ont des millions de lignes, et il faut toujours courir (environ une heure) .
Quand je vérifie mes statistiques d'index à l'aide:
select * from pg_stat_all_indexes
where schemaname <> 'pg_catalog' and (indexrelname like 'othertable_%' or indexrelname like 'mytable_%')
Je vois que seul l'index pour othertable.m_id est utilisé, et que les indices pour col1..3 ne sont pas utilisés du tout. Pourquoi est-ce?
J'ai lu dans un fewplaces que PG n'a traditionnellement pas pu indexer les valeurs NULL. Cependant, j'ai lu que cela a soi-disant changé depuis PG 8.3? J'utilise actuellement PostgreSQL 8.4 sur Ubuntu 10.04. Ai-je besoin de créer un index "partiel" ou "fonctionnel" spécifiquement pour accélérer les requêtes IS NOT NULL, ou est-ce qu'il indexe déjà les valeurs NULL et que je ne comprends pas le problème?
Cela a fonctionné parfaitement pour moi. Une requête de test qui a duré plusieurs minutes s'exécute maintenant en quelques secondes avec cet index. – Cerin