Nakaner
(Nakaner)
8
Hallo Sven,
Ich habe vor etwa einem halben Jahr ein wenig Index-Tuning für OSM Carto gemacht. Viel kam nicht heraus, aber folgende Indexe könntest du noch ausprobieren (ich fand, dass sie einen Effekt hatten). Beachte bitte, dass diese für eine Datenbank mit klassischem OSM-Carto-Layout gelten, du musst sie noch an dein Hstore-Layout anpassen.
CREATE INDEX planet_osm_point_place
ON planet_osm_point USING GIST (way)
WHERE place IN ('city', 'town') AND name is NOT NULL;
CREATE INDEX planet_osm_roads_low_zoom
ON planet_osm_roads USING GIST (way)
WHERE highway IS NOT NULL
OR (railway IS NOT NULL AND railway != 'preserved'
AND (service IS NULL OR service NOT IN ('spur', 'siding', 'yard')));
CREATE INDEX planet_osm_line_name
ON planet_osm_line USING GIST (way)
WHERE name IS NOT NULL;
CREATE INDEX planet_osm_point_capital_names ON planet_osm_point USING GIST(way) WHERE tags @> 'capital=>yes';
Bei den Indexen planet_osm_hstore_polygon_military und planet_osm_hstore_polygon_water solltest du prüfen, ob da nicht noch ein “AND building IS NULL” fehlt. Die partiellen Indexe nutzt PostgreSQL nur, wenn die WHERE-Bedingung näherungsweise identisch ist.
Der originale OSM-Carto-Stil schlägt noch einen zusätzlichen partiellen Index auf planet_osm_polygon vor, der für die Zoomstufen 7 bis 10 hilfreich ist:
CREATE INDEX planet_osm_polygon_way_area_z10
ON planet_osm_polygon USING GIST (way)
WHERE way_area > 23300;
Der Layer landcover_low_zoom lässt sich meinen Untersuchungen nach nicht mit einem weiteren Index (auf die WHERE-Bedingung + way_area-Filter) beschleunigen. Da müsste man mit vereinfachten Geometrien nachhelfen.
Je mehr Indexe man hat, desto mehr Index-Bloat hat man. Man sollte daher regelmäßig (Cronjob/Systemd-Timer) diese Indexe neu bauen und dann den alten Index per “DROP INDEX” löschen.
Die Indexe für capital und way_area halte ich für besonders empfehlenswert. Den speziellen Index für Fähren hast du schon (das ist ein Performance-Klassiker).
Viele Grüße
Michael