Suite

Index spatial Postgis non utilisé

Index spatial Postgis non utilisé


J'ai le tableau suivant :

Tableau "osm_france.france_2po_4pgr" Colonne | Type | Modificateurs ---------------+---------------------------+----- ------ identifiant | entier | non nul osm_id | bigint | nom_osm | caractère variable | osm_meta | caractère variable | osm_source_id | bigint | osm_target_id | bigint | clazz | entier | drapeaux | entier | source | entier | cible | entier | km | double précision | kmh | entier | coût | double précision | reverse_cost | double précision | x1 | double précision | y1 | double précision | x2 | double précision | y2 | double précision | geom_way | géométrie(LineString,4326) | Index : "pkey_france_2po_4pgr" PRIMARY KEY, btree (id) "france_2po_4pgr_gix" gist (geom_way) "idx_france_2po_4pgr_source" btree (source) "idx_france_2po_4pgr_target" btree (target)

Comme vous pouvez le voir, un index spatial est disponible pour la colonne geom_way. J'ai effectué une ANALYSE DU VIDE sur la table pour plus de sécurité.

Maintenant, je lance cette requête très simple :

sélectionnez * depuis osm_france.france_2po_4pgr où ST_DWITHIN(St_TRANSFORM(geom_way,3035),ST_transform(ST_SetSRID(ST_MakePoint(2.3, 48.8),4326),3035),100);

Je recherche donc toutes les géométries à moins de 100 mètres d'un point donné (je transforme les SRID de 4326 à 3035 pour préciser une portée en mètres).

L'analyse d'explication donne :

Seq Scan à france_2po_4pgr (coût = 0,00 ... 1630779.00 rows = 69644 width = 293) (temps réel = 35,044 ... 9407.356 rows = 3 boucles = 1) filtrer: ((ST_Transform (geom_way, 3035) && '0103000020DB0B0000010000000500000046D8C5565EA84C41A950F47CDFFF454146D8C5565EA84C41A950F47C4300464146D8C556C2A84C41A950F47C4300464146D8C556C2A84C41A950F47CDFFF454146D8C5565EA84C41A950F47CDFFF4541' :: géométrie) ET ('0110000020DB0B000046D8C55690A84C41A950F47C11004641'::geometry && st_expand(st_transform(geom_way, 3035), 100::double precision)) AND _st_dwithin(st_transform(geom_way, 3035), '01100008C Row19504100046D par filtre : 5225288 Temps de planification : 0,517 ms Temps d'exécution : 9407,390 ms

Pourquoi cette requête n'utilise-t-elle pas l'index spatial disponible ?


Je suppose que c'est parce que vous utilisez ST_TRANSFORM. Vous pouvez peut-être essayer de créer un index sur st_transform(geom_way,3035) - voir ici :


Voir la vidéo: PGConfRu2019 Дорофей Пролесковский - PostGIS от катастроф