Lorsque vous construisez une requête il est important de se souvenir que seuls les opérateurs du cadre-limite comme &&
tirent avantage des indexes spatiaux GIST. Les fonctions comme distance()
ne peuvent pas utiliser les indexes pour optimiser leur opérations. Par exemple, la requête suivante pourrait être légèrement lente sur une grosse table :
geom_table
qui sont dans un rayon de 100 unités du point (100000, 200000). Elle est lente parce qu'elle calcule la distance entre chaque point de la table et le point que nous avons spécifié, par exemple un calcul de distance()
pour chaque enregistrement de la table. Nous pouvons éviter cela en utilisant l'opérateur &&
pour réduire le nombre de distance requit :
the_geom
, le planificateur de requêtes constatera qu'il peut utiliser l'indexe pour réduire le nombre de ligne avant de calculer le résultat de la fonction distance()
. Notez que la géométrie BOX3D
qui est utilisé dans l'opération &&
est un cadre carré de 200 unités centré sur le point original - c'est notre "cadre de requête". L'opérateur &&
utilise l'indexe pour réduire rapidement l'ensemble résultant aux géométries qui ont un cadre limite qui recouvre le "cadre de requête". En supposant que notre "cadre de requête" est plus petit que l'extension de la totalité de la table, cela réduira considérablement le nombre de calculs de distance qui devra être effectué.
ST_Disjoint
and ST_Relate
, utilisent implicitement l'opérateur de superposition du cadre limite.