Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net SQL:在一个查询中从多个表中选择,还是为每个表选择一个查询?_Asp.net_Sql_Sql Server_Performance_Database Design - Fatal编程技术网

Asp.net SQL:在一个查询中从多个表中选择,还是为每个表选择一个查询?

Asp.net SQL:在一个查询中从多个表中选择,还是为每个表选择一个查询?,asp.net,sql,sql-server,performance,database-design,Asp.net,Sql,Sql Server,Performance,Database Design,关于DAL层部分的后续问题。。第一个问题是关于 我有一个表(PlacesTable),与其他6个表(1:Many和Many:Many关系)一样连接 在我的DAL中,我应该放置一个大查询,将6个表和m:m引用表连接起来(顺便说一句,它会生成多个我不需要的数据),并将所有数据放在它的特定对象属性中,还是应该对每个表使用一个查询,并为每个获取的表创建一个对象。。最后把它们发送到用户界面 如果我不够清楚,请让我知道我需要什么,你需要知道更多的信息 提前感谢您的时间和帮助=)您最好通过一个查询返回UI所需

关于DAL层部分的后续问题。。第一个问题是关于

我有一个表(PlacesTable),与其他6个表(1:Many和Many:Many关系)一样连接

在我的DAL中,我应该放置一个大查询,将6个表和m:m引用表连接起来(顺便说一句,它会生成多个我不需要的数据),并将所有数据放在它的特定对象属性中,还是应该对每个表使用一个查询,并为每个获取的表创建一个对象。。最后把它们发送到用户界面

如果我不够清楚,请让我知道我需要什么,你需要知道更多的信息


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

您最好通过一个查询返回UI所需的所有信息

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


应用程序和SQL server之间最慢的事情是建立连接——连接越少越好。

您最好通过一个查询返回UI所需的所有信息

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


应用程序和SQL server之间最慢的事情是建立连接——连接越少越好。

一般来说,与其他技术相比,数据库在连接多个表中的数据方面表现得更好。如果只执行一个查询,将比执行多个查询获得更好的性能。您还可以从表和对象之间不必建立一对一的关系中获得额外的好处。

一般来说,数据库在连接多个表中的数据方面的性能要比其他技术好得多。如果只执行一个查询,将比执行多个查询获得更好的性能。您还可以从表和对象之间不必建立一对一的关系中获得额外的好处。

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

仅加载所需的数据。考虑你的消费者(在这种情况下,UI)。是否需要显示此数据?只查询您需要的数据。在DAL中构建多个方法,以确保同时加载正确的数据。i、 e.
GetPlacesSummary()
返回以一种方式成形的数据,而
GetDetailedPlaces()
返回更精细的数据集


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

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

仅加载所需的数据。考虑你的消费者(在这种情况下,UI)。是否需要显示此数据?只查询您需要的数据。在DAL中构建多个方法,以确保同时加载正确的数据。i、 e.
GetPlacesSummary()
返回以一种方式成形的数据,而
GetDetailedPlaces()
返回更精细的数据集


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

如果一个大型查询提供的重复数据过多,并且6次往返速度较慢。。。一些选择

  • 使用存储过程在一次数据库调用中返回6个记录集
  • 在服务器上执行一些连接以减少重复数据和往返
    • 兼而有之

你有什么不同的表现吗?或者这是猜测驱动的优化?

如果一个大查询提供了太多的重复数据,并且6次往返速度很慢。。。一些选择

  • 使用存储过程在一次数据库调用中返回6个记录集
  • 在服务器上执行一些连接以减少重复数据和往返
    • 兼而有之

你有什么不同的表现吗?或者这是猜测驱动的优化?

@Oded。但是由于这样一个查询的大小充满了连接,再加上它返回重复的行,因此需要获取大量数据,并需要大量代码来删除重复。。请你参考这个问题,这样你就可以了解整个情况了@IKashef——我已经看完了那个问题。除非通过逐表方法讨论更多兆字节的数据,否则最好一次返回所有数据。@Oded。谢谢。。为了让一切都清楚,所有的连接和复制以及添加额外的类和方法以及大量的循环和条件检查来移除复制都是值得的?@IKashef-我不能告诉你是否值得。取决于什么对您最重要(性能与代码膨胀)。我可以告诉你,与运行多个查询相比,获得一个联接的结果通常更快、更高效。@IKashef-注意,我没有说你必须进行任何联接。您可以使用带有6个选择的单个存储过程来返回所有数据,而不会重复。@Oded。但是由于这样一个查询的大小充满了连接,再加上它返回重复的行,因此需要获取大量数据,并需要大量代码来删除重复。。请你参考这个问题,这样你就可以了解整个情况了@IKashef——我已经看完了那个问题。除非通过逐表方法讨论更多兆字节的数据,否则最好一次返回所有数据。@Oded。谢谢。。为了让一切都清楚,所有的连接和dup