【问题标题】:SQL Query Performance - Which approach is better if any?SQL 查询性能 - 如果有的话,哪种方法更好?
【发布时间】:2012-07-06 23:56:37
【问题描述】:

我必须从 SQL Server 返回几个记录集来构造一个 C# 对象。虽然 EF 目前不支持(可能是测试版)返回这样的复杂对象,但我不得不求助于使用 ADO.NET 返回 DataSet 来检索数据,然后再将其转换为令人愉悦的 C# 表示形式,见下文。

SELECT * FROM ...
exec dbo.usp_SP1 @ProductID,@CatalogName
exec dbo.usp_SP2 @ProductID,@CatalogName    

进行较少的数据库调用总是更好,但是由于此查询的执行方式,是否会对每个 DataSet 产生多个请求是最糟糕的?

【问题讨论】:

    标签: c# sql performance tsql stored-procedures


    【解决方案1】:

    一个数据库往返总是比三个(或两个)更好。

    即使使用这组查询,您的代码也可能是干净的。您只需连续调用DataTable.Load 三次,即可从DbDataReader 加载所有三个结果集。

    所以是的,我建议对所有结果集使用一个更大的查询和一个 DataSet

    【讨论】:

    • 条条大路通向同一个目的地。对数据库的调用越少越好。虽然在这种情况下我更看重干净的代码,但使用 EF 或其他不支持复杂返回类型的 ORM 的性能要好。
    • @DaTribe:我的意思是即使没有 ORM,您的代码也可以是干净的。看看这个问题中的第二个函数,看看我的意思:stackoverflow.com/questions/11362821/…
    • 我明白你的意思,但 ORM 提供的优势之一是编译时类型检查,同时从 DataTables 中提取数据使用字符串文字。
    • @DaTribe:我知道,我知道。我总是更喜欢一个或另一个 ORM 来手动编码数据访问,但我严格指的是您在问题中暴露的问题。
    【解决方案2】:

    您可以在dataset 中引用每个表格结果。 ds.Tables[index].Rows...。所以我会打一个电话,获取所有数据,然后通过调用另一个存储过程或只是一个简单的SELECT来返回它。

    【讨论】:

    • 我同意 JonH 在这一点上的观点,一呼百应!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-06
    • 1970-01-01
    • 2010-09-23
    • 1970-01-01
    • 2017-06-27
    相关资源
    最近更新 更多