存储过程:多次使用用户定义的变量或调用数据库函数

时间:2015-12-04 16:33:00

标签: mysql stored-procedures

我正在编写一个存储过程,它会在多个查询中使用3个动态计算的日期来计算不同的总和。

如果这是在代码中,我会计算函数开头的日期,并在后续语句中使用局部变量,这样计算只需要进行一次。我不熟悉MySQL数据库的内部工作原理,所以我不确定相同的原则是否适用于存储过程。

我对存储过程的第一次尝试看起来像是:

CREATE PROCEDURE `CalcValues` (
    IN p_id int
)
BEGIN

    declare thirty datetime DEFAULT DATE_ADD(CURDATE(), INTERVAL -30 DAY);

    UPDATE rpt
    SET decTarget = (SELECT SUM(decOne) 
                      FROM tblOne 
                      WHERE id = p_id AND
                            dteOne <= CURDATE() AND dteOne > thirty)
    WHERE id = p_id;

END

我删除了一大堆将在本节后处理的内容,但基本上我计算3个日期而不是一个日期,并且在每个查询中至少使用其中一个日期。程序中总共有10个左右的查询。

在我想要使用计算日期时,在程序开始时计算datetimes并使用局部变量或调用DATE_ADD(CURDATE(), INTERVAL -30 DAY)会更有效吗?

1 个答案:

答案 0 :(得分:0)

这实际上更多的是编程哲学问题而不是语用学问题,答案非常重要。我的意见是将函数结果分解为局部变量会导致更多 可读 代码,我相信这是一个不错的优化编译器无论如何都会做的。在我看来,它的SQL不会对此产生影响。