0

描述

我正在尝试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(...),例如30EXPLAIN说明使用了主键,查询速度很快。如果我使用我的函数,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...)
4

1 回答 1

0

就我而言,这种方法无法实现我想要实现的目标。

于 2012-02-15T02:43:41.893 回答