Правильный способ написать хранимую процедуру в MySQL

Я написал одну хранимую процедуру в базе данных MySQL следующим образом:

CREATE PROCEDURE sp_Test(
    IN Mode     VARCHAR(50),
    IN UserID   INT,
    ....
    ....  
)
BEGIN
    SET @sqlQuery = "";
    IF (Mode = 'Select') THEN
       //Select query
    ELSEIF (Mode = 'Update') THEN
       //update query
    ELSEIF (Mode = 'Delete') THEN
       //Delete query
    END
END

и согласно моей необходимости я могу назвать это так

CALL sp_Test("Select", 1, ...)
OR
CALL sp_Test("Update", 1, ...)
OR
CALL sp_Test("Delete", 1, ...)

Это нормально для производительности? Или я должен написать отдельные хранимые процедуры для каждого режима, как

для SELECT

CREATE PROCEDURE sp_Test_Select(
    IN UserID   INT,
    ....
    ....  
)
BEGIN
    //Select query
END

для обновления

CREATE PROCEDURE sp_Test_Update(
    IN UserID   INT,
    ....
    ....  
)
BEGIN
    //Select query
END

2 ответа

На мой взгляд, нет существенной разницы в производительности этих процедур (если вы не собираетесь использовать их сотни раз в секунду 24x7).

Но есть разница в удобочитаемости. Это существенная разница. test_DELETE(item) легче понять, чем test("delete", item), Имейте в виду, что вы пишете код не только для машины, но и для следующего человека, который будет работать над вашим проектом. Используйте свой второй вариант.

Помимо ограничения производительности (если есть вообще); Всегда рекомендуется иметь отдельную процедуру, определенную для отдельных операций (select/insert/update/delete) так как

  1. Это увеличивает Redability.

  2. Ремонтопригодность. Отдельная процедура может поддерживаться хорошо, если вообще нужно будет вносить какие-либо изменения в будущем.

Учтите, про передачу параметра для разных операций. За select скорее всего, вам не нужно передавать какой-либо параметр в процедуру, но для insert, update а также delete вам придется передать параметр. Не будет ли для вас беспорядком разграничить их в рамках единого тела процедуры?

Другие вопросы по тегам