0

我在 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, ...)

性能好吗?或者我应该为每种模式编写单独的存储过程,例如

对于选择

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

更新

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

2 回答 2

0

除了性能限制(如果有的话);始终建议为单独的操作(///)定义单独的select过程,因为insertupdatedelete

  1. 它增加了可红性。

  2. 可维护性。如果将来需要进行任何更改,则可以很好地维护单独的程序。

考虑一下,关于为不同的操作传递参数。很select可能您不需要将任何参数传递给过程,但对于,insert您将必须传递参数。在单个程序体中区分它们不会让您一团糟吗? updatedelete

于 2014-10-14T12:21:07.887 回答
0

在我看来,这些程序的性能没有显着差异(除非您打算每秒 24x7 使用它们数百次)。

但在可读性上有区别。这是一个显着的差异。test_DELETE(item)比 更容易理解test("delete", item)。请记住,您不仅要为机器编写代码,还要为下一个从事您项目的人编写代码。使用您的第二种选择。

于 2014-10-14T12:16:18.583 回答