用mysql中的伪递归函数优化查询

时间:2015-07-03 14:14:39

标签: mysql function optimization

我想知道如何优化其中包含函数的查询。 具体来说,请

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行。生成选择需要一个多小时。如果我运行解释我得到它不是在查询上使用键,但它在函数内正确执行。 我想知道问题是否是这样,使用类似我的函数,在主查询中选择的每一行上都对整个表进行了相同的选择。

有关优化此类内容的任何建议或参考吗?

1 个答案:

答案 0 :(得分:0)

INDEX(PersA, PersB, Prio_year)

这是复合索引。它与你拥有的不同(3个独立的索引)。它会在您给出的示例代码中更好地工作。