非確定UDFとは、入力が同じでも常に同じ結果を戻すとは限らないUDFのことです。CREATE FUNCTIONまたはREPLACE FUNCTION文にDETERMINISTIC句が指定されていない場合、またはNOT DETERMINISTIC句が指定されている場合、UDFは非確定と見なされます。非確定UDFは、各選択行ごとに評価されるので、インデックス列の条件に非確定UDFが含まれている場合、全AMP操作が実行されることになります。
例えば、以下のテーブル定義があるとします。
CREATE TABLE t1 (c1 INTEGER ,c2 VARCHAR(9)) PRIMARY INDEX ( c1 );
以下の関数定義があるとします。
CREATE FUNCTION UDF_RAN(LowerBound INTEGER, UpperBound INTEGER) RETURNS INTEGER LANGUAGE C NO SQL PARAMETER STYLE TD_GENERAL NOT DETERMINISTIC EXTERNAL;
以下のSELECT文には、UDF_RANという非確定UDFを呼び出すc1インデックス列の条件が含まれています。そのUDFが呼び出されると、その結果として全AMP操作が実行されることになります。
SELECT * FROM t1 WHERE c1 = UDF_RAN(1,12);