各位有没有遇到,在程序里调用存储过程,执行的速度很慢,但把存储过程里的内容直接写到程序里,运行速度就很快。为什么?

解决方案 »

  1.   

    存储过程的优点:   1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。   2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。   3.存储过程可以重复使用,可减少数据库开发人员的工作量   4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权--------------------------------------------------------------------------------
    相对于直接使用SQL语句,在应用程序中直接调用存储过程有以下好处:   (1)减少网络通信量。      调用一个行数不多的存储过程与直接调用SQL语句的网络通信量可能不会有很大的差别,可是如果存储过程包含上百行SQL语句,那么其性能绝对比一条一条的调用SQL语句要高得多。   (2)执行速度更快。      有两个原因:首先,在存储过程创建的时候,数据库已经对其进行了一次解析和优化。其次,存储过程一旦执行,在内存中就会保留一份这个存储过程,这样下次再执行同样的存储过程时,可以从内存中直接调用。   (3)更强的适应性.      由于存储过程对数据库的访问是通过存储过程来进行的,因此数据库开发人员可以在不改动存储过程接口的情况下对数据库进行任何改动,而这些改动不会对应用程序造成影响。   (4) 布式工作.      应用程序和数据库的编码工作可以分别独立进行,而不会相互压制。
      

  2.   

    呵呵,看一下SQL SERVER进程如何重启一下SQL SERVER服务试试,或重启服务器
      

  3.   

    是不是在程序里还有其他的处理呢?再者就是,如果存储过程直接在sql中运行,那么可能有个执行计划优化的过程,所以,也有可能比程序中快一些。
      

  4.   

      确实碰到过这种情况,,存储过程执行比T-sql更慢,,
    部分原因是,存储过程旧的编译信息已过期,不是最优的执行计划了造成的,
     可以用exec sp_recompile 'procedure_Name' 重新编译,还有调用函数时,查询分析器执行是1s,客户端却要30s,可以用sql语法,代替函数
    能正常,,