Ich muss die Ausführungszeit davon verringern. Diese Anweisung Verarbeitung verschwenden etwa 30 Minuten, wenn ich gerade auf ": i_member_name" eingefügt, alle anderen ist null.Wie wählt man optionale Parameter auf Orakel (Ausführungszeit von Orakel verringern)?
Wenn ich so ausführen, ist es in Ordnung, nur 30 Sekunden verschwendet.
SELECT
A.MEMBER_NUM, A.MEMBER_NAME, B.MEMBER_INFO FROM REG_MEMBER A, MEMBER_DETAIL B
WHERE A.MEMBER_ID = B.MEMBER_ID
AND (LOWER(A.MEMBER_NAME) LIKE LOWER(:i_member_name || '%'))
--AND (LOWER(B.MEMBER_INFO) LIKE LOWER(:i_member_info || '%'))
--AND (A.MEMBER_NUM LIKE :i_member_num || '%')
--AND (LOWER(B.MEMBER_ADD) LIKE LOWER('%' || :i_member_add || '%'))
Also habe ich eine Frage: Wie Parameter zu überprüfen ist Null, dann nicht gegen mehr Ausführungszeit lesen. so etwas wie dieser
SELECT A.MEMBER_NUM, A.MEMBER_NAME, B.MEMBER_INFO FROM REG_MEMBER A, MEMBER_DETAIL B
WHERE
(LOWER(A.MEMBER_NAME) LIKE LOWER(:i_member_name || '%'))
and case when :i_member_num is null then return
else (A.MEMBER_NUM LIKE :i_member_num || '%')
end
Verwenden Sie boolesche Logik. Ändere 'AND (LOWER (B.MEMBER_INFO) WIE LOWER (: i_member_info || '%'))' to '(UND (LOWER (B.MEMBER_INFO) WIE LOWER (: i_member_info || '%')) ODER: i_member_info IST NULL) '. Dies kann jedoch keinen Unterschied machen - Sie müssen den Abfrageplan verwenden, um zu überprüfen, –
Vielleicht gibt es einen anderen Weg - erstellen Sie einen Index auf 'low (member_name)' etc.? Da Sie innerhalb von 'lower()' springen müssen, hilft ein Index für 'member_name' nicht. – mathguy
Können Sie mir mehr angeben? – Solution