我想编写一个简单的单行查询来从数据库中选择一个值。
如果我为此查询编写存储过程而不是在C#代码中编写简单的选择查询,那么我相信这个简单的选择查询的存储过程会更快,但是为什么呢?
我对存储过程和在代码中编写简单查询之间的区别感到困惑。我不明白为什么存储过程比直接在代码中编写一个简单的查询更快?
我想编写一个简单的单行查询来从数据库中选择一个值。
如果我为此查询编写存储过程而不是在C#代码中编写简单的选择查询,那么我相信这个简单的选择查询的存储过程会更快,但是为什么呢?
我对存储过程和在代码中编写简单查询之间的区别感到困惑。我不明白为什么存储过程比直接在代码中编写一个简单的查询更快?
存储过程比SQL代码更快
这是个谬论,性能始终相等。引自书籍:《为企业架构微软® .NET解决方案》
SQL是一种语言,通过它您可以声明有关在数据库上执行的操作(查询、更新或管理操作)的意图。数据库引擎得到的都是文本。就像编译器处理的C#源文件一样,SQL源代码必须以某种方式编译,以产生一系列较低级别的数据库操作——这个输出称为执行计划。从概念上讲,生成执行计划可以看作是编译程序的数据库对应物。"Stored procedures are precompiled and cached so the performance is much better."
这取决于查询的复杂程度,对于简单的查询,最好将其编写并执行为一个查询本身。然而,当您需要在数据库端进行更多的处理(例如,您想要在游标中获取数据并进行操作等),存储过程更好,因为它们在数据库服务器上执行,并避免了不必要的开销,如解析和额外的通信。
存储过程是数据库中的存储查询。它们是预编译的。当您请求数据库执行存储过程(SQL Server)时,SQL Server已经具有存储过程的执行计划。而简单的查询需要在运行时创建它们的执行计划。您需要在这里学习更多。
存储过程是预编译和优化的,这意味着查询引擎可以更快地执行它们。相比之下,代码中的查询必须在运行时解析、编译和优化。这一切都需要时间。