C# SQL Server存储过程在网络群集中的性能是否更好?

C# SQL Server存储过程在网络群集中的性能是否更好?,c#,sql,sql-server,stored-procedures,database-performance,C#,Sql,Sql Server,Stored Procedures,Database Performance,从我所读到的内容来看,使用存储过程与简单地用C语言构建命令并在程序代码中显式调用命令相比,似乎有着边际的性能优势,至少当涉及到共享服务器程序和db引擎的机器时,以及当过程简单时是如此。大多数人似乎认为这是一个“偏好问题”,并添加了一些其他小的好处来证明他们的观点 但是,我找不到任何相关信息,这就是当数据库引擎位于与主应用程序分离的物理机器上时,存储过程的好处 如果我没有弄错的话,在服务器场中,存储过程不会从主服务器应用程序中卸载某些cpu线程上的处理,而是在db引擎服务器的cpu上完成主处理吗?

从我所读到的内容来看,使用存储过程与简单地用C语言构建命令并在程序代码中显式调用命令相比,似乎有着边际的性能优势,至少当涉及到共享服务器程序和db引擎的机器时,以及当过程简单时是如此。大多数人似乎认为这是一个“偏好问题”,并添加了一些其他小的好处来证明他们的观点

但是,我找不到任何相关信息,这就是当数据库引擎位于与主应用程序分离的物理机器上时,存储过程的好处

如果我没有弄错的话,在服务器场中,存储过程不会从主服务器应用程序中卸载某些cpu线程上的处理,而是在db引擎服务器的cpu上完成主处理吗?或者,当C库“构建”db引擎要处理的信息时,这是否已经在db引擎的cpu上完成了

具体地说,我有一个长时间运行的事务,我可以在一个C事务块中执行多个调用,但我怀疑,通过减少对db引擎的网络调用,以及确保不在主服务器应用程序上执行处理,存储的进程实际上会带来巨大的性能好处


这是真的吗?

如果SP只是一个简单的查询,即一条SELECT语句,那么性能的提高在于SP是预编译的。当查询运行时,如果是查询或SP,则不应看到任何差异


如果SP更复杂,我不确定效果如何,因为这取决于查询。

如果SP只是一个简单的查询,即一条SELECT语句,那么性能的提高在于SP是预编译的。当查询运行时,如果是查询或SP,则不应看到任何差异


如果SP更复杂,我不确定效果如何,因为这取决于查询。

与Dapper或类似or/m的实体框架相比,存储过程的性能提高可能会有所不同,从几乎相同到非常显著的性能改进。我认为,如果没有看到将被转换为存储过程的代码,就无法回答您的问题


话虽如此,根据我的经验,一个存储过程调用与应用程序代码中的多个语句相比,是的,它可能会更快。

与Dapper或类似于or/M的实体框架相比,存储过程的性能提升可能会有所不同,从几乎相同到非常显著的性能改进。我认为,如果没有看到将被转换为存储过程的代码,就无法回答您的问题


话虽如此,根据我在应用程序代码中调用一个存储过程而不是多个语句的经验,是的,它可能会更快。

SP更重要的好处是,所有数据都保存在DBMS中,而不是发送回或转发到客户端。如果您处理的是大量数据,其好处更为明显。如果您的DB位于不同的机器上,差异会增加,如果它们之间的连接速度较慢,差异会更大。 相反,您必须考虑SP通常不被编译成机器代码,所以如果SP实现非常复杂的逻辑,则可以更快地在客户端上实现逻辑。 然后,您还应该考虑将业务逻辑移到服务器不太适合代码维护,您可以在DB中添加应该在客户机代码中执行的技术借记。
因此,没有一种解决方案适用于所有季节,但通常编写良好的SP比在客户端上运行相同的代码要快

SP更重要的好处是,所有数据都保存在DBMS中,而不是发送回或转发到客户端。如果您处理的是大量数据,其好处更为明显。如果您的DB位于不同的机器上,差异会增加,如果它们之间的连接速度较慢,差异会更大。 相反,您必须考虑SP通常不被编译成机器代码,所以如果SP实现非常复杂的逻辑,则可以更快地在客户端上实现逻辑。 然后,您还应该考虑将业务逻辑移到服务器不太适合代码维护,您可以在DB中添加应该在客户机代码中执行的技术借记。
因此,没有一种解决方案适用于所有季节,但通常编写良好的SP比在客户端上运行相同的代码要快

这里存在一些问题。正如其他人所说,这要看情况而定。原始的select语句几乎不会引起注意。如果有一个非常复杂的查询,那么SP可以节省大量重复的解析。如果存在大量中间数据,则SP会将数据保持在本地,从而减少网络流量。如果你的 DB的规格比客户端高,由于CPU的马力,它可能运行得更快


不利的一面可能是每个人都会因为可以在客户机上完成的处理而陷入数据库的困境。这通常是在运行动力不足的SQL server时发生的。另一个微妙的方面是,多核DB服务器的许可成本可能令人印象深刻。SQL Server box上的$per cycle可能是客户端上的$per cycle的许多倍。

这里有一些问题。正如其他人所说,这要看情况而定。原始的select语句几乎不会引起注意。如果有一个非常复杂的查询,那么SP可以节省大量重复的解析。如果存在大量中间数据,则SP会将数据保持在本地,从而减少网络流量。如果您的数据库的规格高于客户端,那么由于CPU的马力,它可能会运行得更快


不利的一面可能是每个人都会因为可以在客户机上完成的处理而陷入数据库的困境。这通常是在运行动力不足的SQL server时发生的。另一个微妙的方面是,多核DB服务器的许可成本可能令人印象深刻。SQL Server box上的$per cycle可能是客户端上的$per cycle的许多倍。

在这种情况下,“长时间运行的事务”可能涉及六个表,需要条件处理。在我看来,如果db引擎位于另一台机器上,这将显著提高性能,减少网络调用,并保证在另一台物理机器上完成处理。然后是维护部分。TSQL在C中存储在哪里?它在编译代码中吗?更新SQL Server中的存储过程比生成/编译/发布代码要简单得多。在这种情况下,“长时间运行的事务”可能涉及六个表,需要条件处理。在我看来,如果db引擎位于另一台机器上,这将显著提高性能,减少网络调用,并保证在另一台物理机器上完成处理。然后是维护部分。TSQL在C中存储在哪里?它在编译代码中吗?更新SQL Server中的存储过程比构建/编译/发布代码要简单得多。哎呀。希望这里有一些有用的东西。我注意到我背了一点necro。哎呀。希望这里有些有用的东西。我同意,如果可能的话,最好在客户身上计算。然而,在这个场景中,我可能还没有完全清除我的坏消息,我假设客户机没有任何缓存数据可以处理,因此需要将其加载到表中来完成工作。虽然它可能会使计算更快,但公平地说,预加载表是处理成本的一部分。有点像是说,如果我把鸭子排成一排,射杀它们会更容易,但排成一排也需要时间。我同意,如果可能的话,最好以客户为准。然而,在这个场景中,我可能还没有完全清除我的坏消息,我假设客户机没有任何缓存数据可以处理,因此需要将其加载到表中来完成工作。虽然它可能会使计算更快,但公平地说,预加载表是处理成本的一部分。有点像说,如果我把鸭子排成一排,射杀它们就容易多了,但把它们排成一排也需要时间。