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プロファイリングが機能しなくなるのはなぜですか?
問題を解決するための洞察をいただければ幸いです。ありがとうございました。