Nullwerte in PostgreSQL indexieren

Ich habe eine Abfrage in der form:

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

Die Abfrage gibt ein paar hundert Datensätze, obwohl die Tabellen mit Millionen von Zeilen und es dauert ewig zu laufen (rund eine Stunde).

Wenn ich meine index-Statistiken verwenden:

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

Sehe ich, dass nur der index für othertable.m_id verwendet wird, und dass die Indizes für col1..3 nicht benutzt. Warum ist das so?

Ich gelesen habe paar Ortedie PG hat traditionell nicht in der Lage gewesen, um den index NULL-Werte. Allerdings habe ich gelesen, dieser hat sich angeblich geändert, da PG 8.3? Ich bin derzeit mit PostgreSQL 8.4 auf Ubuntu 10.04. Brauche ich, um eine "Teil -" oder "funktional", index gezielt, um die Geschwindigkeit NICHT NULL Abfragen, oder ist es schon die Indizierung Null und ich bin nur Missverständnisse das problem?

InformationsquelleAutor der Frage Cerin | 2010-08-12

Schreibe einen Kommentar