`
october731
  • 浏览: 86549 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

关于应用提交sql语句与直接调用存储过程的性能比较问题

阅读更多
首先说明,在公司是做的基于C/S结构的开发,但是这里讨论的主要是数据库查询的性能的问题。我们现在的解决方案是这样:基于查询的业务,一点也不写入到应用程序当中,所有的查询,全部都由在数据库端编写存储过程,而应用程序只负责提交参数,并且调用指定存储过程来完成查询。主要的查询功能完成过程便如上。
我所知道的数据查询还有另外一种方法,那便是:由应用程序生成sql语句,然后把这跳sql提交到数据库,然后来让数据库来分析并执行,并返回给应用程序。并且好像现在利用这种方式的完成查询的还不少。几次看robbin的文章,说的是一分钟or平均一秒钟提交140跳sql语句,等等之类。
至少在我看来,在数据库端编写存储过程,由具体业务调用存储过程的方法,远远优于第二种提交sql语句的方法。优点我自己总结了一下几点:
1. 业务更加灵活。任何一个可想到的业务,只需要在一个存储过程当中,多添加一个typ,多添加一个语句便可实现,大不了是多加一个“@typ=’Z’”;
2. 调试更加方便。毕竟是直接已经在数据库之上,调试存储过程并观察返回的结果集或是执行增删改操作直接观察数据库变化,都比把业务写在持久层更方便;
3. 简化持久层的工作。持久层只需要知道,完成某项业务,需要调用某个存储过程即可,编写sql语句的麻烦,拼sql字符串的问题,统统都转移到数据库上去吧。

而关于提交sql语句到数据库再执行这种方式,个人认为最大的弊端在于:每次提交sql
语句到数据库,数据库都会认为这是一条新的sql语句,并且对这条语句进行编译,SQL SERVER 2005还会对其进行查询性能分析(其他的数据库不知道,但应该也会吧?),结果每次执行的时候,这种事情也会占用数据库宝贵的性能资源,尤其是并发查询相当多的时候。但是对于已经写好并且编译通过的存储过程来说,上面所诉的两条“罪状”均不存在。个人认为,采用调用存储过程的方式优势更多,只是没有想明白为什么采用提交sql的方式,现在依然还是用的这么频繁。
今天第一次在javaeye发帖,抛砖主要是为了引玉。小弟学浅,望各位师兄师姐指点。
分享到:
评论
3 楼 javatracker 2009-01-10  
robbin 写道
且不说存储过程的可维护性,可扩展性问题,就说性能。应用缓存可以减少向数据库发送SQL语句,以JavaEye为例,80%的SQL语句由于缓存统统都被节省掉了,只有20%的SQL才真正发送到数据库服务器,这样的性能才能极大提高。

再说你所谓的参数绑定问题,纯粹是你自己不会用PreparedStatement导致的。


他的意思是直接发sql和使用存储过程谁快的问题,而不是使用缓存和直接差数据库谁快的问题
2 楼 robbin 2008-12-28  
且不说存储过程的可维护性,可扩展性问题,就说性能。应用缓存可以减少向数据库发送SQL语句,以JavaEye为例,80%的SQL语句由于缓存统统都被节省掉了,只有20%的SQL才真正发送到数据库服务器,这样的性能才能极大提高。

再说你所谓的参数绑定问题,纯粹是你自己不会用PreparedStatement导致的。
1 楼 javatracker 2008-12-26  
1、简单查询肯定sql快,提交sql直接进入sql引擎,完事后直接返回;

2、而调用存储过程就要先调用存储过程引擎,再转换到sql引擎,再转回到存储过程引擎,多做了一步无用工;

3、如果是复杂查询,要对数据库进行多个操作,还是存储过程快,因为这时是数据库内部模块的切换,而sql就要多次从外部操作

相关推荐

    SQL Server中存储过程比直接运行SQL语句慢的原因

    在 SQL Server 中,存储过程比直接运行 SQL 语句慢的原因是 Parameter sniffing 问题。Parameter sniffing 是指 SQL Server 在执行存储过程时,使用参数的统计信息来优化执行计划,但这种优化方式有时可能会导致执行...

    存储过程中怎么动态执行sql语句

    “存储过程中怎么动态执行SQL语句”这一标题表明文章将介绍如何在Oracle数据库的存储过程中编写能够动态执行的SQL语句。动态SQL是指在运行时才能确定其具体内容的SQL语句,它允许用户根据不同的条件构造不同的查询或...

    C# winform调用SQL存储过程-菜鸟入门 详细注释

    内容概要:简单的C# winform调用存储过程实例,创建存储过程入参,通过SqlConnection对象和SqlCommand对象调用存储过程,获取存储过程的出参并显示出来,详细代码注释,希望对用到C#调用存储过程的小伙伴有帮助 ...

    Informatica调用存储过程图文流程

    在这里,我们可以写入调用存储过程的 SQL 语句。 5. 使用变量:如果存储过程需要输入参数,可以使用 Informatica 中的变量来传递参数。将变量替换为实际的参数值,以便在调用存储过程时传递正确的参数。 6. 保存和...

    在VB6.0中调用SQL Server的存储过程.pdf

    在SQL Server中,存储过程可以通过Transact-SQL语句CREATE PROCEDURE创建。存储过程的定义包含两个主要组成部分:过程名称及其参数的说明,以及过程的主体。过程名称及其参数的说明中,过程名必须符合标识符规则,...

    sql server调用存储过程

    在SQL Server中,存储过程是一种预编译的SQL语句集合,可以视为数据库中的可重用函数,用于执行特定的任务。它们提供了许多优势,包括性能优化、代码复用、安全性增强以及减少网络流量等。本篇文章将深入探讨如何在...

    SQL SERVER数据库开发之存储过程应用.rar

    调用存储过程则使用`EXEC`或`EXECUTE`命令,传入参数进行执行。例如: ```sql CREATE PROCEDURE GetEmployeeById @EmployeeId INT AS BEGIN SELECT * FROM Employees WHERE EmployeeId = @EmployeeId END EXEC ...

    java调用sqlserver存储过程.pdf

    使用 JDBC,可以连接到数据库,执行 SQL 语句,调用存储过程等。 在本例中,使用了 JDBC 来连接到 SQL Server 数据库,调用 `InsertUser` 存储过程。 6. 存储过程的优点 存储过程有很多优点,例如可以提高数据库的...

    存储过程- 06.在应用程序中调用存储过程

    - **减少网络流量**:调用存储过程比多次发送单独的SQL语句更高效,因为存储过程的调用只需要一个请求。 2. **在应用程序中调用存储过程的方法** - **使用API或驱动**:大多数数据库提供API(如Java的JDBC,C#的...

    SQL语句大全和存储过程

    1. **性能优化**:存储过程可以缓存执行计划,多次调用比单独执行SQL语句更高效。 2. **模块化编程**:将复杂的逻辑封装起来,便于管理和复用。 3. **安全性**:可以设置访问权限,限制对数据的直接操作。 4. **减少...

    pb调用存储过程

    总的来说,Pb调用存储过程是通过声明并执行存储过程的变量来完成的,而存储过程本身是在数据库层面创建的,它可以包含一系列的SQL语句和其他数据库操作。理解和熟练运用这两个概念对于进行数据库交互的开发工作至关...

    VB 调用 sql server 存储过程

    存储过程是一组预编译的T-SQL语句,它们存储在SQL Server服务器上,可以接受输入参数,并可能返回输出参数。存储过程可以看作是一种封装机制,用来重复执行常见的任务。它们类似于DOS系统中的批处理文件(.bat),但...

    sql存储过程学习,详细的解说存储过程的语法,结构和用法。

    - ASP中,可以通过ADO(ActiveX Data Objects)调用存储过程,比较两种调用方式(例如直接SQL与存储过程调用)的优劣。 - 在.NET环境中,使用ADO.NET的SqlCommand对象可以方便地执行存储过程。 总结,SQL存储过程...

    mysql 查询存储过程的 sql 语句.docx

    调用存储过程可以通过 `CALL` 语句来完成: ```sql CALL GetCustomerOrders(1234); ``` 这里的数字 `1234` 是传递给存储过程的 `customerId` 参数值。 #### 四、存储过程中使用变量 可以在存储过程中声明变量,...

    SQL存储过程创建与调用

    - **减少网络流量**:相对于单条SQL语句,发送一个存储过程调用可以减少网络传输的数据量。 4. **存储过程的类型** - **无参数存储过程**:不接收任何输入或输出参数。 - **带参数存储过程**:接收输入参数,...

    数据库的存储过程

    数据库的存储过程是数据库管理系统提供的一种预编译的SQL语句集合,它是数据库中的一个对象,可以被多次调用,从而提高数据访问的效率。在本文中,我们将深入探讨存储过程的基本理念、语法以及常见的实现方式,特别...

    学习sql存储过程的心得

    SQL存储过程是数据库管理系统中一组为了完成特定功能的SQL语句集合,它们被预先编译并存储在数据库中,可以通过一个名称来调用执行。学习SQL存储过程是提升数据库管理和应用开发效率的关键步骤,它可以帮助我们更好...

    自动执行SQL语句&创建标准的Sql 存储过程

    结合自动执行SQL语句和存储过程,我们可以在特定条件下自动调用存储过程,实现自动化的工作流程。例如,每当有新的订单插入,可以触发一个存储过程来计算并更新销售统计信息。 在实践中,这些功能极大地提高了...

Global site tag (gtag.js) - Google Analytics