首页 > 基础设施 > 正文

动态生成SQL语句 VS 存储过程

2008-06-02 10:52:14  来源:CSDN

摘要:当软件开发使用MicrosoftSQL2005存储数据时,有多种方式来检索信息。 其中就有动态生成的SQL语句和存储过程。但是他们的性能是否一样?
关键词: 数据库 SQL VS

    当软件开发使用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的预先编制的执行存储过程。不过,单是表现不应该是拒绝使用存储过程的依据,因为他们的确提供了额外的好处。


第三十八届CIO班招生
国际CIO认证培训
首席数据官(CDO)认证培训
责编:

免责声明:本网站(http://www.ciotimes.com/)内容主要来自原创、合作媒体供稿和第三方投稿,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性,读者在使用前请进一步核实,并对任何自主决定的行为负责。本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。