Mysql 慢嵌套函数 请让我知道你寻求什么样的信息来改进这个问题,而不仅仅是否决投票。

Mysql 慢嵌套函数 请让我知道你寻求什么样的信息来改进这个问题,而不仅仅是否决投票。,mysql,Mysql,我有一个函数如下所示: DELIMITER $$ DROP FUNCTION IF EXISTS f_splitadjprice; CREATE FUNCTION f_splitadjprice (id CHAR(8), startdate DATE) RETURNS FLOAT BEGIN DECLARE splitfactor FLOAT; DECLARE splitadjprice FLOAT; SELECT f_splitfactor(id, startdate) INTO sp

我有一个函数如下所示:

DELIMITER $$
DROP FUNCTION IF EXISTS f_splitadjprice;
CREATE FUNCTION f_splitadjprice (id CHAR(8), startdate DATE)
RETURNS FLOAT 

BEGIN

DECLARE splitfactor FLOAT;
DECLARE splitadjprice FLOAT;

SELECT f_splitfactor(id, startdate) INTO splitfactor;

SELECT (f.p_price FROM fp_v2_fp_basic_prices as f WHERE f.fsym_id = id AND 
f.p_date = startdate) * splitfactor INTO splitadjprice;

RETURN splitadjprice;

END$$
DELIMITER ;
拆分因子的函数为:

DELIMITER $$
DROP FUNCTION IF EXISTS f_splitfactor;
CREATE FUNCTION f_splitfactor (id CHAR(8), startdate DATE)
RETURNS FLOAT

BEGIN

DECLARE splitfactor FLOAT;

SELECT IFNULL(EXP(SUM(LOG(f.p_split_factor))),1) INTO splitfactor
FROM fp_v2_fp_basic_splits AS f
WHERE f.fsym_id = id AND f.p_split_date > startdate AND f.p_split_date < 
NOW();

RETURN splitfactor; 

END$$
DELIMiTER ;
分隔符$$
如果存在f_分割因子,则删除函数;
创建函数f_splitfactor(id CHAR(8),startdate DATE)
返回浮动
开始
宣布分割因子浮动;
选择IFNULL(EXP(SUM(LOG(f.p\u split\u factor))),1)到splitfactor
从fp_v2_fp_基本_拆分为f
其中f.fsym_id=id和f.p_分割日期>开始日期和f.p_分割日期<
现在();
收益分割因子;
结束$$
定界符;
函数f_的运行速度非常慢。大约14秒。我已经试着自己运行函数的各个部分。也就是说,函数调用f_splitfactor并选择(f.p_price FROM fp_v2_fp_basic_prices)作为f,其中f.fsym_id=id和
f、 p_日期=开始日期)。在函数之外单独运行这两个函数时,运行它们需要0001秒。所以,整个问题是,只要我想通过嵌套函数进行组合,就需要花费10万倍的时间。

解决方案是不在函数中调用表。总的来说,这似乎是一种糟糕的做法,但速度非常缓慢。相反,应该尝试摆脱该函数,直接在查询中执行该函数

你能为f_splitfactor添加代码吗?@p.Salmon Sure mate:)@p.Salmon你能帮我吗?@Chris请阅读如何询问SQL相关问题。还提供
EXPLAIN
语句的结果,这些语句会提示您如何执行查询。