描述
我正在尝试JOIN
使用存储函数的结果创建一个表。存储的函数返回一个无符号整数,它与我要加入的字段类型相同。
问题
我要尝试的字段JOIN
是主键。我的问题是 MySQL 似乎没有在这里使用主键。
查询的相关行(如下所示)是:
LEFT JOIN second_db.s
ON s.id = first_db.find_spend_id(qi.other_type, qi.other_id)
如果我用整数替换我的函数调用first_db.find_spend_id(...)
,例如30
,EXPLAIN
说明使用了主键,查询速度很快。如果我使用我的函数,EXPLAIN
说明没有使用主键,查询很慢。
问题
在此联接中使用此函数的结果时,是否有某种方法可以使用我的函数并让 MySQL 使用主键?我应该如何修改我的代码以获得这个最光荣的解决方案?
信息
询问
EXPLAIN SELECT *
FROM first_db.qhr
JOIN first_db.qi
ON qi.id = qhr.issue_id
AND qhr.status = 'Accepted'
LEFT JOIN second_db.s
ON s.id = first_db.find_spend_id(qi.other_type, qi.other_id)
JOIN second_db.spend_reports AS sr
ON sr.id = s.spend_report_id
JOIN first_db.companies AS b
ON b.id = s.member_id
JOIN first_db.brands
ON brands.id = sr.brand_id
LIMIT 0, 10
功能
CREATE DEFINER=`user`@`%` FUNCTION `find_spend_id`(lookup_other_type ENUM('One', 'Two'), lookup_other_id INT(10))
RETURNS int(10)
READS SQL DATA
BEGIN
(...snip actual code...)
return 30;
END
解释
id select_type table type possible_keys key key_len ref rows Extra
(...snip...)
1 SIMPLE s ALL NULL NULL NULL NULL 5999 "Using join buffer"
(...snip...)