Projekt

Allgemein

Profil

Aktionen

Unterstützung #108

offen

Ungenutzte Indexe ausmisten

Von G. Richardson vor mehr als 9 Jahren hinzugefügt. Vor mehr als 9 Jahren aktualisiert.

Status:
Neu
Priorität:
Niedrig
Zugewiesen an:
-
Zielversion:
-
Beginn:
19.11.2015
Abgabedatum:
% erledigt:

0%

Geschätzter Aufwand:

Beschreibung

In 34ea9b39f4 habe ich schon ein paar doppelte Indexe rausgeschmissen, weil es in den Tabellen mittlerweile einen Primary Key gibt, und die händisch gesetzten deshalb nicht mehr nötig waren. Es gibt aber sicherlich noch mehr, was man aufräumen könnte. Z.B. gibt es einen Index auf lower(source) in acc_trans, der nur greift, wenn man in einer Abfrage nach einem eindeutigen source sucht, z.B.:

 select * from acc_trans where lower(source) = 'Rechnung 55506505';

Sobald man in der Abfrage das lower wegläßt, oder ein like benutzt, ist der Index schon nutzlos. Ich konnte keine aktuelle Codestelle finden, wo das so benutzt wird, das stammt vermutlich also noch aus alten Zeiten. In den Datenbanken, wo ich nachgeschaut habe, ist das sogar der größte Index, bei einem Mandanten knapp 3MB groß, und wurde noch nie benutzt. Ich würde den Index also gerne entfernen, und nehme gerne Vorschläge entgegen, was noch entfernt werden könnte/sollte.

Hier kann man sich die aktuell unbenutzten Indexe und deren Größe anschauen:

SELECT 
    relid::regclass AS table, 
    indexrelid::regclass AS index, 
    pg_size_pretty(pg_relation_size(indexrelid::regclass)) AS index_size, 
    idx_tup_read, 
    idx_tup_fetch, 
    idx_scan
FROM 
    pg_stat_user_indexes 
    JOIN pg_index USING (indexrelid) 
WHERE 
    idx_scan = 0 
    AND indisunique IS FALSE;
Aktionen

Auch abrufbar als: Atom PDF