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