Cas d'utilisation 3 — Appel de fonction dans l'instruction SELECT - AWS Conseils prescriptifs

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Cas d'utilisation 3 — Appel de fonction dans l'instruction SELECT

L'appel d'une fonction dans une where clause peut réduire les performances des requêtes lorsque la fonction existe VOLATILE et que vous n'utilisez pas le select mot-clé lors de l'appel de la fonction :

Select * from tab_name where FieldName = FunctionName(parameters);

Une analyse d'index est exécutée si l'selectinstruction est utilisée lors de l'appel de la fonction :

Select * from tab_name where FieldName = ( select FunctionName(parameters) );

Le pnr_number champ possède un index dans la rnr_expiry_date table. L'index est utilisé lors de la comparaison de la valeur de la where clause.

explain analyze select * from perf_user.rnr_expiry_date where pnr_number= 'EE9F41'; "Index Scan using rnr_expiry_date_idx3 on rnr_expiry_date (cost=0.29..8.31 rows=1 width=72) (actual time=0.020..0.021 rows=1 loops=1)" " Index Cond: ((pnr_number)::text = 'EE9F41'::text)" "Planning Time: 0.063 ms" "Execution Time: 0.038 ms"

Un scan séquentiel est effectué lorsqu'une fonction est appelée sans le select mot-clé, même lorsqu'un index est disponible sur le champ.

explain analyze select * from perf_user.rnr_expiry_date where pnr_number= perf_user.return_data(); "Seq Scan on rnr_expiry_date (cost=0.00..27084.00 rows=1 width=72) (actual time=0.112..135.917 rows=1 loops=1)" " Filter: ((pnr_number)::text = (perf_user.return_data())::text)" " Rows Removed by Filter: 99999" "Planning Time: 0.053 ms" "Execution Time: 136.803 ms"

Un scan d'index est effectué lorsque la fonction est appelée avec le select mot clé.

explain analyze select * from perf_user.rnr_expiry_date where pnr_number= (select perf_user.return_data() ); "Index Scan using rnr_expiry_date_idx3 on rnr_expiry_date (cost=0.55..8.57 rows=1 width=72) (actual time=0.058..0.061 rows=1 loops=1)" " Index Cond: ((pnr_number)::text = ($0)::text)" " InitPlan 1 (returns $0)" " -> Result (cost=0.00..0.26 rows=1 width=32) (actual time=0.021..0.022 rows=1 loops=1)" "Planning Time: 0.147 ms" "Execution Time: 0.111 ms"