MySQL, созданный с использованием функций, приводит к сбою приложения - PullRequest
0 голосов
/ 24 октября 2019

У меня есть представление в моей базе данных (MySQL), которое ранжирует пользователей. Он генерируется с помощью функций:

CREATE ALGORITHM=UNDEFINED SQL SECURITY INVOKER VIEW `users_ranks` AS select distinct `u`.`id` AS `id`, 
            `isUserVerified`(`u`.`id`) AS `verification`,
            `hasUserPicture`(`u`.`id`) AS `profile_picture`,
            `hasUserHobbies`(`u`.`id`) AS `hobbies`,
            ...
            ) AS total_value  

        from `users` `u`

Это пример одной из функций, вызываемых представлением:

CREATE FUNCTION hasUserPicture(user_id INT(10) UNSIGNED) RETURNS int(3)
            NO SQL
            DETERMINISTIC
            SQL SECURITY INVOKER
        BEGIN
            DECLARE hasPicture VARCHAR(191);

            SELECT
                users.profile_picture
                INTO
                hasPicture
                FROM
                users
                WHERE
                users.id = user_id
            LIMIT 1;

            IF hasPicture IS NULL or hasPicture = '' THEN
                RETURN 0;
            ELSE
                RETURN 4;
            END IF;
        END;

На мой взгляд, существует множество вызовов функций (обновлениезанимает 21сек)Проблема заключается в том, что представление обновляется всякий раз, когда пользователь изменяет информацию, а большое количество пользователей приводит к тому, что целому приложению не хватает памяти и происходит сбой. Как я могу решить проблему? Есть ли лучший способ добиться того же результата?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...