

MySQLでストアドファンクションが遅かったので調べたところ、SQLクエリではなく通常の演算処理（代入など）に時間がかかっている事がわかりました。  
試しに簡略化した以下のストアドファンクションを実行したのですが、単純なループ10000回で0.283 secもかかりました。  
こんなにかかるものなのでしょうか？

※実行環境はDockerのmysql:5.7を使っています。

[code]

        delimiter //
        CREATE FUNCTION loop_test (_loop_max int unsigned) RETURNS int unsigned
        BEGIN
            DECLARE _loop_count int unsigned;
        
            SET _loop_count = 0;
            _loop: LOOP
                IF NOT _loop_count < _loop_max THEN
                    LEAVE _loop;
                END IF;
                SET _loop_count = _loop_count + 1;
            END LOOP;
        
            RETURN _loop_count;
        END//
        delimiter ;
        
        select loop_test(1000);
        select loop_test(10000);
        select loop_test(100000);
    
[/code]

[code]

    --------------
    select loop_test(1000)
    --------------
    
    +-----------------+
    | loop_test(1000) |
    +-----------------+
    |            1000 |
    +-----------------+
    1 row in set (0.038 sec)
    
    --------------
    select loop_test(10000)
    --------------
    
    +------------------+
    | loop_test(10000) |
    +------------------+
    |            10000 |
    +------------------+
    1 row in set (0.283 sec)
    
    --------------
    select loop_test(100000)
    --------------
    
    +-------------------+
    | loop_test(100000) |
    +-------------------+
    |            100000 |
    +-------------------+
    1 row in set (2.813 sec)
    
[/code]


CC BY-SA 4.0
2021-10-03T03:29:50.703
82836
2021-10-03T03:29:50.703
48466
question
mysql
MySQLのストアドファンクションの演算処理が遅すぎるのですが、なぜなのでしょうか？