我想知道如何优化其中包含函数的查询。 具体来说,请
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行。生成选择需要一个多小时。如果我运行解释我得到它不是在查询上使用键,但它在函数内正确执行。 我想知道问题是否是这样,使用类似我的函数,在主查询中选择的每一行上都对整个表进行了相同的选择。
有关优化此类内容的任何建议或参考吗?
答案 0 :(得分:0)
INDEX(PersA, PersB, Prio_year)
这是复合索引。它与你拥有的不同(3个独立的索引)。它会在您给出的示例代码中更好地工作。