PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Pas de mise en cache du plan d'exécution pour SQL dynamique dans PostgreSQL 9.4 ?

Par documentation :

C'est une fonctionnalité raisonnable . La nature d'une requête dynamique est qu'elle change sa structure d'un appel à l'autre.

Si vous souhaitez appeler la même requête à plusieurs reprises (éventuellement avec des paramètres différents), utilisez des instructions préparées :

Ou utilisez du code SQL simple (non dynamique) dans les fonctions plpgsql, celles-ci sont également traitées comme des instructions préparées.

Dans votre cas , il serait peut-être préférable de PREPARE requêtes dynamiquement. Nous avons eu un cas très similaire ici :

De plus, c'est extrêmement rare qu'une requête passe 1,4 seconde pour la planification et seulement 0,1 seconde pour l'exécution. Peut-être vaut-il la peine d'être examiné. Il peut y avoir des moyens d'optimiser. Comme avec join_collapse_limit :

Connexe :