哪种方法更好,是两次存储过程调用还是一次大调用,然后只过滤列表?

时间:2018-08-29 12:36:13

标签: c# sql performance stored-procedures

这更多是性能问题,而不是代码。

因此,根据我们的要求,我们需要在特定的“管理员”下检查具有指定ssn的数据库中的人员。我们还需要检查该人的配偶是否也位于同一管理员下。

我们有一个存储过程,可以检索指定管理员下的所有人员。

在我们的C#代码中,我们有一个约会列表。每个对象都保存该人和配偶的ssn数据以及管理员ID。

foreach(var obj in myList) {
    Guid adminID = obj.Admin;
    string spouseSSN = obj.SpouseSSN,
      iSSN = obj.PersonSSn;

    List < Person > adminSub = RetrievePersonsUnderAdmin(adminID); //calls the sp

    Person spouse = adminSub.FirstOrDefault(p => p.SSN == spouseSSN);
    Person iPerson = adminSub.FirstOrDefault(p => p.SSN == iSSN);
}

那是先前的实现。现在,我们想修改sp,以便可以使用ssn立即获取该人。我所做的就是接受一个可选的@OptionalCondition nvarchar(max)参数,该参数将添加到WHERE子句中:

BEGIN
    DECLARE
        @query nvarchar(max)
        SET @query = 
            'SELECT
                . . . . -- select columns
            WHERE
                . . . . -- where clause
            ' + ISNULL(@CustomCondition, '') -- additional conditions @CustomCondition, optional
    EXEC sys.sp_executesql @query
END

这样,我们可以在C#代码中使用它来完成此操作:

Person spouse = RetrievePersonsUnderAdmin(adminID, string.Format("AND p.SSN = '{0}'", spouseSSN)).FirstOrDefault();

Person spouse = RetrievePersonsUnderAdmin(adminID, string.Format("AND p.SSN = '{0}'", iSSN )).FirstOrDefault();

问题是,调用2 sps或先前的实现哪个更好?请注意,管理员可以拥有500-1000个下属。

编辑:

  

如果可能的话,您可以在此处发布答案,同时还包括您在我的代码中观察到的所有缺陷。这样,未来的开发人员可能会偶然发现我遇到的相同问题,并希望这篇文章可以对他们有所帮助。感谢您在评论部分提供的帮助。

0 个答案:

没有答案