我的UDF非常慢,解释不起作用

时间:2017-11-14 12:59:47

标签: user-defined-functions ibm-midrange

我最近开始研究IBM I AS / 400 我正在尝试创建一个函数,根据4个输入选择不同的东西,有时它会进行链操作,这应该接近自由... 它不是。< / p>

功能:

CREATE OR REPLACE FUNCTION yxdb.GET_SEARCH_RESULT_TYPE (stakeholder_id INTEGER, account_number INTEGER, search_type VARCHAR(10),search_type_ref INTEGER)
RETURNS varchar(40)
LANGUAGE SQL
DETERMINISTIC --caching as parameter ==> svar. || 'not deterministic' ==> no caching.
NOT FENCED
BEGIN
DECLARE name VARCHAR(40);
    SET name = CASE WHEN search_type = 'EMNADRESSE' THEN 
        --email 
        'Email 1'
     WHEN search_type = 'FFADRESSE ' THEN 
        -- Hovedadresse                  
       -- 'Hovedadresse'
        CASE WHEN account_number = 0
        THEN 'Interessent'
        ELSE 'Konto'
        END
     WHEN search_type = 'TNKLEVADR ' THEN
        --Tankleveringsadresse
        --'Tankleveringsadresse'
        'Tank ' ||  (select TKVOL ||' - ' ||  TKBRUG from tkmstp where tknr = search_type_ref and tkknnr = account_number)
     ELSE 
        search_type
    END;
    RETURN name;
END;

因此有效时间大约为9秒,当使用167行时,但解释计划表示它每个只需要~171 ms。 (我知道这是在最佳表现下)。

试图评论|| (select TKVOL ||' - ' || TKBRUG from tkmstp where tknr = search_type_ref and tkknnr = account_number)然后它的执行速度非常快。

试图切换fenced,尝试切换Deterministic

我试图将其创建为子查询,在主查询中,这也非常快......

用法:

select stake.*, yxdb.GET_SEARCH_RESULT_TYPE(1,fkkntnr, fkreltyp, FKPRDREF) RESULT_TYPE from frnkonp stake
where stake.fkkonidn in (202818,203116,941284,941285)

包含选择时UDF是否无法执行?

0 个答案:

没有答案