Anwendungsfall 3 — Funktionsaufruf in der SELECT-Anweisung - AWS Präskriptive Leitlinien

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Anwendungsfall 3 — Funktionsaufruf in der SELECT-Anweisung

Das Aufrufen einer Funktion in einer where Klausel kann die Abfrageleistung verringern, wenn die Funktion aktiviert ist VOLATILE und Sie beim Aufrufen der Funktion das select Schlüsselwort nicht verwenden:

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

Ein Indexscan wird ausgeführt, wenn die select Anweisung beim Aufrufen der Funktion verwendet wird:

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

Das pnr_number Feld hat einen Index in der rnr_expiry_date Tabelle. Der Index wird verwendet, wenn der Wert in der where Klausel verglichen wird.

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"

Ein sequentieller Scan wird durchgeführt, wenn eine Funktion ohne das select Schlüsselwort aufgerufen wird, auch wenn ein Index für das Feld verfügbar ist.

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"

Ein Indexscan wird durchgeführt, wenn die Funktion mit dem select Schlüsselwort aufgerufen wird.

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"