我正在编写一个存储过程,它会在多个查询中使用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)
会更有效吗?
答案 0 :(得分:0)
这实际上更多的是编程哲学问题而不是语用学问题,答案非常重要。我的意见是将函数结果分解为局部变量会导致更多 可读 代码,我相信这是一个不错的优化编译器无论如何都会做的。在我看来,它的SQL不会对此产生影响。