SQL:从一个查询中的多个表或每个表的查询中进行选择?

时间:2011-03-06 20:28:02

标签: asp.net sql sql-server performance database-design

关于DAL层部分的后续问题。关于dealing with large objects

的第一个问题

我有一个表(PlacesTable)由6个其他表连接(1:很多很多:很多关系)

在我的DAL中,我应该添加一个大查询来连接6个表格+ m:m参考表格(顺便说一下,它会产生多个我不需要Please refer to my old question的数据)并将所有数据放入它的特定对象属性,或者我应该为每个表使用单个查询并为每个获取的表创建一个对象..并最终将它们发送到UI?

如果我不够清楚,请告诉我您需要了解的更多信息!

提前感谢您的时间和帮助=)

4 个答案:

答案 0 :(得分:2)

如果一个大的查询提供过多的重复数据,并且6次往返很慢......一些选项

  • 使用存储过程在一次数据库调用中返回6个记录集
  • 在服务器上进行一些连接以减少重复数据和往返
    • 做两件事

你有任何性能差异吗?或者这是猜测驱动的优化?

答案 1 :(得分:1)

您的问题似乎是关于是否应将相关实体加载到Places对象中。听起来你的模型中有一些课程,这是一个很好的开始。

仅加载您需要的数据。考虑您的消费者(在这种情况下,UI)。你需要显示这些数据吗?只查询您需要的数据。在DAL中构建多个方法以确保当时加载正确的数据。即GetPlacesSummary()以单向形式返回您的数据,而GetDetailedPlaces()则返回更精细的数据集。

查看支持延迟加载的数据访问组件。这意味着只有当您访问这些属性(如Customer.Invoices.Count)时,才会从数据库中实际查询数据。

答案 2 :(得分:0)

最好使用单个查询返回UI所需的所有信息。

每个数据库连接都很慢,您必须等待所有数据库连接完成才能为UI准备好数据。

应用程序和SQL服务器之间最慢的是建立连接的行为 - 越少越好。

答案 3 :(得分:0)

通常,数据库在连接来自多个表的数据方面比其他技术更好。如果您进行一次查询,那么与进行多次查询相比,您将获得更好的性能。您还可以获得额外的好处,即不必在表和对象之间建立一对一的关系。