您的位置:首页 > 数据库

性能测试:动态生成SQL语句 VS 存储过程

2008-05-26 09:35 337 查看
当软件开发使用MicrosoftSQL2005存储数据时,有多种方式来检索信息。 其中就有动态生成的SQL语句和存储过程。但是他们的性能是否一样?

下载测试程序和源代码

测试描述:

设计这个测试的目的是来比较在.NET应用程序中动态SQL查询语句和存储过程执行的时间是否相等。

测试过程中的功能

在这两种情况下,速度测试为两套SQL语句提供完全相同的功能,这是至关重要的。这是同样重要的是,各种语句的使用。每个测试运行,以adventureworks示例数据库为例, 4 个SQL语句相当于存储过程。

四个过程如下:

在单表中查询所有数据;

使用where条件查询一个表中的某行

在三个表中使用两个联合和where条件查询某些数据

在三个表中使用Join,子查询和where语句查询某些数据

循环

执行一个单一的SELECT语句速度太快,要准确测量。为了避免错误和异常,建造回路和重复执行测试代码。每个测试,循环被执行一万次。时间测试的时间是使用秒表自动控制。每个测试是多次和平均计算结果。

测试条件

硬件

测试结果如下表所示,是那些生产使用的Athlon64 3200 + 2 GB的内存。这些试验均显示出相对的进一步测试结果是在不同的设备上实验。 测试在3个作业系统中执行,每一个都是最新的Service Pack和修补程序。这些是:

Windows XP Windows Server 2003 R2 Windows Vista Ultimate

在每个测试,该软件被编译为.NET框架3.5控制台应用程序

Compiled using Visual Studio 2008 Professional Edition

Compiled using Visual C# 2008 Express Edition

结果

下表表明四个实验中循环语句的平均时间。前两列表示使用动态生成SQL语句和存储过程,第三列表示两者的不同百分比:

Dynamic SQL Stored Procedure Difference

Simple Select 21.83s 21.82s 0.05%

Select with Where Clause 2.51s 2.49s 0.80%

Select with Joins 25.08s 25.22 -0.56%

Select with Sub-Select 24.68s 26.47 -7.25%

结论

结果表示在多数情况下使用动态生成SQL语句和存储过程的不同是不容忽视的。明显的区别是在最后使用join,子查询和where语句。在这种情况下使用存储过程在性能上有小的下降。这些结果表明,普遍的观点认为,存储过程速度比动态SQL快是不正确的。这种想法往往源于错误的思想,SQL Server的预先编制的执行存储过程。不过,单是表现不应该是拒绝使用存储过程的依据,因为他们的确提供了额外的好处。

原文:http://www.blackwasp.co.uk/SpeedTestSqlSproc.aspx
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: