存储过程或批量声明

故事是我需要优化我的数据库访问。

现在我需要从6个不同的表中检索相关数据。 我在这些方面总结了人们的建议:

  1. 对于不同的命令使用相同的连接仍然需要在每次执行命令时访问db

  2. 存储过程是一种很好的方法,可以使用多个select语句(不使用连接)从多个表中进行选择,并且只需访问一次数据库

  3. 数据库上实际负载的来源是与它的连接,而不是数据的数量(数量仍会影响性能,但N连接是一个更大的因素)。

现在我希望有多个SELECT语句,并且如上所述,我认为我应该使用Stored Procedure选项。 但我想到了使用批处理SELECT语句

示例: SELECT e FROM p; SELECT x,y,z FROM t; SELECT ....; SELECT ....; SELECT e FROM p; SELECT x,y,z FROM t; SELECT ....; SELECT ....;

这是否会导致单次访问数据库作为存储过程? 你觉得我的选择怎么样?

..谢谢你提前的时间:)

这是否会导致单次访问数据库作为存储过程? 你觉得我的选择怎么样?

回答你的问题:唯一的区别是你将整个查询而不仅仅是存储的proc名称传输到数据库服务器。 除非您的查询长度为几MB或每秒执行几千次,否则在性能方面不应有任何差别。

你没有提到有关索引的任何内容。 从那里开始,因为在select语句中包含6个表并不是很多。 根据需要排除不必要的列和过滤行。 查看执行计划并查看成本最高的内容(还有很多其他需要查找的内容。 从此处开始 )如果返回的结果不相关,则可以在存储过程中作为单独的查询运行。

通过数据库引擎优化顾问运行它,让SQL Server获得许可费。

让存储过程返回多个查询可能不是一个理想的解决方案: 任何SQL Server多记录集存储过程都有问题?

尝试管理用户对要提取的数据量的期望。 我有一些用户,因为他们绝对必须拥有一个拥有200多个字段的单个数据集。 他们发誓表演永远不会成为问题; 时代变了。

我看了你的另一个问题。

两种方法都是合理的。

在某些应用程序中,有多个连接是合理的,每个连接都并行提取数据(您可以使用异步方法在ADO.NET中执行此操作)以在表单或网页上显示。

但是,在您的情况下,使用您的模型,您必须询问您对数据的处理方式? 模特很好。 编写连接所有表的查询也没问题。 但在一对多的关系中,你有什么期望? 您是否希望填充一位家长,然后是一群孩子? 此时,您已经离开了行和列的世界,并且您有一个对象模型。 这就是entity framework或NHibernate或自定义代码之类的东西 – 将您的良好数据库设计转换为可在应用程序中很好地使用的对象模型。