我正在尝试分析 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 分析工作?
任何解决问题的见解将不胜感激。谢谢你。