Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.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
C# 存储过程或批量语句_C#_Asp.net_Sql_Sql Server_Ado.net - Fatal编程技术网

C# 存储过程或批量语句

C# 存储过程或批量语句,c#,asp.net,sql,sql-server,ado.net,C#,Asp.net,Sql,Sql Server,Ado.net,故事是我需要优化我的数据库访问 现在我需要从6个不同的表中检索相关数据。我总结了人们在这些方面的建议: 使用相同的连接 不同的命令仍然会产生不同的效果 使用每个命令访问数据库 执行 存储过程是一种很好的方法 有多个select语句 (不使用联接)从多个表中进行选择,并且只对数据库进行一次访问 数据库上实际负载的来源是与数据库的连接,而不是数据的数量(数量仍然影响性能,但N个连接是一个更大的因素) 现在我想要有多个SELECT语句,正如我所建议的那样,还有以上几点,我认为我应该使用存储过程选项。但

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

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

  • 使用相同的连接 不同的命令仍然会产生不同的效果 使用每个命令访问数据库 执行

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

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

  • 现在我想要有多个SELECT语句,正如我所建议的那样,还有以上几点,我认为我应该使用存储过程选项。但是我想到了使用批处理SELECT语句

    示例:
    从p中选择e;从t中选择x、y、z;选择。。。。;选择

    这是否会导致以存储过程的形式访问数据库? 你觉得我的选择怎么样


    …提前感谢您的时间:)

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

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

    让存储过程返回多个查询可能不是理想的解决方案:

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

    这是否会导致以存储过程的形式访问数据库?你觉得我的选择怎么样


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

    我看了您的另一个问题

    这两种方法都是合理的

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


    然而,在您的案例中,对于您的模型,您必须询问您对数据做了什么?模型很好。编写一个连接所有表的查询也可以。但是在一对多的关系中,你期望什么呢?您是否希望填充一个父级,然后填充一个子级集合?此时,您已经离开了行和列的世界,拥有了一个对象模型。这就是实体框架、NHibernate或自定义代码发挥作用的地方——将良好的数据库设计转换为可以在应用程序中很好地使用的对象模型。

    为什么不在存储过程中使用联接?这是非常常见的。它需要大量的代码(循环和if语句)来删除重复项。。我希望你能参考我以前的问题,检查一下答案中的Join语句。。也许我在跟踪一个糟糕的书面陈述!因此,这两种方法都将对数据库进行一次访问,并且这两种方法都将产生相同的性能,但不会有明显的差异。但是对于繁重和频繁的操作,存储过程是一条出路吗。。。我说对了吗?实际上我需要所有我选择的栏目。我认为数据库设计会导致重复的行。当然,它不是完全相同的,但例如,我有两个表(项目和类别,其中一个项目可以有多个类别)。。联接查询现在将为Cat1和Cat2中的Item1生成两行。。我希望你明白了这一点,下面是我的数据库设计示例和建议的连接查询:。。非常感谢=)1-我如何决定何时使用多个连接是合理的?2-我正在显示一个特定的儿童档案,一对多和多对多将使用中继器来显示它们。3-不,这里的主要项目是孩子,所以我需要填充所有孩子的信息,并将他的父母作为一部分信息。4-如果你注意到的话,我被建议经常使用LinqToSql和NHibernate,我想我可能会选择NHibernate(但我认为我的应用程序现在没有它们可以做得更好,因为我是按计划的,但我肯定会学习NH)。