拥有一个更通用的存储过程或多个存储过程是否更好?

时间:2014-06-06 05:19:12

标签: sql sql-server stored-procedures database-design

对于每个单独的案例,拥有一个具有多个可为空的输入参数或不同存储过程的存储过程是否是一种良好的做法?

例如,我将数据存储在一般Vehicle表中。它有几个通用列,例如VehicleNameWeightColor等....它还有一个VehicleType列,用于指定车辆是否为汽车,飞机,船,自行车等......每种不同的车型在自己的表中都有自己独特的属性/列。因此会有Car表格,其中包含MilesPerGallonMaxNumberOfPassengers等字段。

示例Vehicle表:

      CREATE TABLE Vehicle
      (
          VehicleID INT PRIMARY KEY,
          VehicleType varchar(50),
          Name varchar(150),
          Color varchar(50),
          Weight varchar(50)
      )

示例Car表:

      CREATE TABLE Car
      (
          VehicleID int FOREIGN KEY,
          MilesPerGallon varchar(50),
          MaxNumberOfPassengers int
      )

将数据插入数据库时​​,所有常规字段都存储在主Vehicle表中,而所有特定字段都根据VehicleType列值存储在相应的表中。因此,Car值将存储在Car表中。

当使用存储过程插入数据时,最好是有一个存储过程可以处理所有不同的车辆类型,或者有多个存储过程来处理每种不同的车辆类型?如果只使用一个存储过程,我可以拥有默认情况下NULL的所有可能输入参数。

在这种情况下,最佳做法是什么?

1 个答案:

答案 0 :(得分:0)

在大多数使用数据库的系统中,最能限制性能的系统部分是数据库。我的意思是,当分析一部分不涉及停止和等待用户输入的代码时,如果数据库调用在代码分析中,它通常是代码的一部分,花费的时间最长。

(这并非总是如此,但在大多数商业应用程序中都是如此。如果您的应用程序涉及从数据库中获取一些简单数据,然后执行非常计算密集型操作 - 例如根据数据库中的值求解偏微分方程 - 然后它不会成为现实。但是,我所描述的大多数应用程序 - 包括我目前正在处理的应用程序 - 数据库操作可能需要30%到95%或更多的运行时间。)< / p>

您可以做的任何事情都可以让您的数据库操作更高效。 DB擅长的是Set操作。如果你的存储过程除了SELECT / UPDATE / DELETE / iNSERT语句中的东西之外还有一些逻辑,那么它们几乎肯定不会像它们那样有效。

出于这个原因,我建议使用一些集中有效的存储过程而不是一个通用的复杂存储过程。但是,与所有绩效建议一样,唯一的证据就是尝试和衡量绩效。