Indexation spatiale

Objectif

Limiter les recherches lors des requêtes selon un critère spatial.

Permet de trouver rapidement :

  • Objets qui interagissent avec un point ou une surface donnés
  • Paires d’objets en relation spatiale

Sans index, Oracle devrait comparer chaque géométrie avec toutes les autres.

Rectangle minimum englobant (MBR)

Approximation d’une géométrie par un rectangle.

graph LR
    A[Géométrie complexe] --> B[MBR simplifié]
    B --> C[Recherche rapide]

Les MBR permettent des comparaisons rapides avant les calculs exacts.

R-Tree (méthode par défaut)

Structure d’index hiérarchique basée sur les MBR.

Les MBR sont regroupés dans des nœuds parents qui ont eux-mêmes des MBR.

Recherche efficace par élimination successive de branches.

Quadtree (alternative)

Découpe récursive de l’espace en 4 carrés égaux (pavage/tesselation).

Chaque niveau divise les carrés en 4 sous-carrés.

Moins utilisé qu’R-Tree dans Oracle Spatial moderne.

Création d’un index spatial

CREATE INDEX ville_spatial_idx 
ON ville(geometry)
INDEXTYPE IS MDSYS.SPATIAL_INDEX;

Index créé automatiquement sur la colonne de type SDO_GEOMETRY.

L’index utilise R-Tree par défaut.

Métadonnées spatiales

Avant de créer un index, les métadonnées doivent être définies :

INSERT INTO USER_SDO_GEOM_METADATA VALUES (
    'VILLE',          -- nom de la table
    'GEOMETRY',       -- nom de la colonne
    SDO_DIM_ARRAY(
        SDO_DIM_ELEMENT('X', -180, 180, 0.005),  -- longitude
        SDO_DIM_ELEMENT('Y', -90, 90, 0.005)     -- latitude
    ),
    8307  -- SRID
);
COMMIT;

Définit les dimensions, bornes et tolérance pour la colonne géométrique.