0

我正在尝试分析 MySQL 中的一些查询,版本:

mysql  Ver 14.14 Distrib 5.5.28, for debian-linux-gnu (x86_64) using readline 6.2

从标准方法开始,

SET profiling = 1;

...和一个示例查询:

SELECT  mer.name
FROM    merchants mer
JOIN (
        SELECT  mem.id, mem.merchant_id
        FROM    members mem
        WHERE   is_test_account(mem.email) = false # THIS CAUSES PROBLEMS!
     ) subquery
ON mer.id = subquery.merchant_id
GROUP BY mer.id;

当我在嵌套查询中使用任何自定义函数is_test_account时会出现问题,如上图所示。执行显示的查询会阻止它出现在配置文件列表中,SHOW PROFILES; 从内部查询的条件中删除函数可以WHERE解决问题!

作为参考,该函数is_test_account如下所示:

DELIMITER //

CREATE FUNCTION is_test_account(p_email_addr VARCHAR(255))
    RETURNS BOOLEAN
    DETERMINISTIC
BEGIN
    RETURN (p_email_addr like '%demo.com'
        OR  p_email_addr like '%example.com'
           );
END//

为什么在嵌套查询中使用该函数会阻止 MySQL 分析工作?

任何解决问题的见解将不胜感激。谢谢你。

4

0 回答 0