我在其中一个存储过程中遇到了性能问题。 以下为伪代码:Oracle存储过程性能
PROCEDURE SP_GET_EMPLOYEEDETAILS(P_EMP_ID IN NUMBER, CUR_OUT OUT REF CURSOR)
IS
BEGIN
OPEN CUR_OUT FOR
SELECT EMP_NAME, EMAIL, DOB FROM T_EMPLOYEES WHERE EMP_ID=P_EMP_ID;
END;
上述的存储过程需要约20秒至返回的结果与设定假设P_EMP_ID = 100
然而,如果我硬编码雇员ID为100在存储过程中,存储过程在40毫秒内返回结果集。
因此,当该值是硬编码而不是读取参数值时,相同的存储过程对同一参数值的行为不同。
表T_EMPLOYEES有大约100万条记录,并且在EMP_ID列上有一个索引。
希望对此有任何帮助,以了解如何改进此存储过程的性能或者可能是此处存在的问题。
我的第一个猜测是参数的类型(本例中为NUMBER)和数据库列的类型之间的错配,但由于您的代码只是伪代码,因此很难分辨这可能是案例... –
我已验证该列的数据类型。这是NUMBER。 – Nick