0
我不知道如何优化一个有函数的查询。 具体来说,采取优化一个带有伪递归函数的查询mysql
select all_couples.*,
getCoauth(PersA, PersB, Prio_year) as PastCoauth
from all_couples
而且功能
CREATE DEFINER=`root`@`localhost` FUNCTION `getCoauth`(pA INT(11), pB INT(11), y YEAR(4)) RETURNS int(11)
BEGIN
RETURN (
select count(*)
from all_couples as d
where PersA=pA
and PersB=pB
and Prio_year < y
);
END
我的工作表如下
Appln_id int(11)
PersA int(11), index PersA
PersB int(11), index PersB
Prio_year year(4), index Year
表有10.000.000行。生成选择需要一个多小时。如果我运行解释,我发现它没有使用查询中的键,但它在函数内正确执行。 我想知道是否问题在于,使用像我这样的函数,对于在主查询中选择的每一行,整个表上的选择都一样。
任何建议或参考优化这样的事情?
这将为每个返回的行运行函数,并且从性能角度来看非常可怕。请结帐JOIN和GROUP BY – winmutt
我试过了,但问题是,出于函数的原因,我不知道如何建模'Prio_year