我试图在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分析工作?
非常感谢解决问题的任何见解。谢谢。