Optimisation des requêtes SQL

Mettre les conditions (where) les plus "rapides" en premier

L'analyseur de requêtes se charge lui-même d'adopter la stratégie d'exécution de la requête théoriquement la plus rapide.

Il détermine donc l'ordre d'exécution des conditions.

Dans certains cas où l'analyseur n'a pas assez d'éléments pour choisir, mettre en premier la condition la plus "rapide" ou la plus discriminante permet d'optimiser les requêtes.

Utiliser les sous-requêtes

Dans certains cas, l'utilisation de sous-requêtes est plus efficace que les multiples conditions et jointures.

Il faut donc penser à tester l'utilisation de sous-requêtes, d'autant plus qu'elles permettent de décomposer un problème complexe en plusieurs problèmes plus simples

Utilisation des fonctions spatiales préfixées ST_ dans les requêtes spatiales

Les fonctions spatiales de PostGIS (préfixées ST_ pour respecter le standard SQL/MM) comprennent pour la plupart l'appel intégré de l'opérateur spatial &&.

Cet opérateur utilise les index spatiaux pour effectuer un pré-tri résultant de l'intersection des rectangles englobants des objets (Bounding Box) ce qui accélère considérablement l'exécution des requêtes spatiales.

Le tableau ci-dessous précise pour chaque fonction spatiale l'utilisation ou non de l'opérateur spatial && :

Fonction spatiale

Opérateur && intégré

ST_Contains

Oui

ST_ContainsProperly

Oui

ST_Covers

Oui

ST_CoveredBy

Oui

ST_Crosses

Oui

ST_Disjoint

Non

ST_Equals

Oui

ST_Intersects

Oui

ST_Overlaps

Oui

ST_Relate

Non

ST_Touches

Oui

ST_Within

Oui

Utilisation de la commande EXPLAIN

PostgreSQL réalise un plan de requête pour chaque requête qu'il reçoit.

Choisir le bon plan correspondant à la structure de la requête et aux propriétés des données est absolument critique pour de bonnes performances, donc le système inclut un planificateur complexe qui tente de choisir les bons plans.

La commande EXPLAIN permet d'obtenir des informations sur le déroulement de la requête pour évaluer son efficacité.

Cette commande affiche le plan d'exécution que l'optimiseur de PostgreSQL engendre pour l'instruction fournie.

L'utilisation de la commande EXPLAIN a été détaillée dans le module 5 Aller plus loin.