小弟,开发经验不足,希望向大家问一下实际开发中,底层开发的技巧
(这里所谓的底层是指三层中的数据层,牵涉到操作数据库的代码。)现在的困惑:见很多软件后台牵涉到数据库的代码都是使用的存储过程,
小弟也知道存储过程有它的优势,
比如:
可以把程序代码和数据库操作代码分离,这样扩展能力更好;
在编写存储过程时,数据库就会对编写的存储过程进行分析;
......问题1:我也见到很多开发人员把存储过程的定义(或者说SQL语句)还是放到程序代码中,
而没有放到数据库中定义,这和SQL语句执行有什么差别,执行性能上又有什么差别?问题2:是不是对于数据层的编写,尽量使用存储过程来代替基本的SQL语句?问题3:不知道大家在开发中,对数据层操作数据库代码的编写有什么好的习惯?
分不是问题,希望和大家交流!

解决方案 »

  1.   

    我先说一下我的观点:当然存储过程性能和效率上综合来说是比较高的,但是当是简单的SQL语句还是没有必要使用存储过程的,对于牵涉到数据的更改:增删改时或者语句比较复杂时首先考虑使用存储过程。
    而对于见到很多开发人员把存储过程的定义(或者说SQL语句)还是放到程序代码中, 
    而没有放到数据库中定义,这和SQL语句执行有什么差别,执行性能上又有什么差别? 
    这种方式,我感觉也就没有体现出来存储过程的优势,和执行SQL语句也就没有太大区别了
      

  2.   

    楼主这么高的分 这么多的勋章 还说开发经验不足???太谦虚了吧存储过程最大的好处就是能够隐藏数据结构 
    比如说:别人看到我的程序 如果是用sql语句写的 那么数据结构 别人就能够推测出来
            但是如果你是用 存储过程写的 在程序中就只是调用存储过程 那么别人就只能够看到你
            的存储过程名称  尤其是像银行等保密性比较强的软件
      

  3.   

    个人观点如下:
    问题1:我也见到很多开发人员把存储过程的定义(或者说SQL语句)还是放到程序代码中, 
    而没有放到数据库中定义,这和SQL语句执行有什么差别,执行性能上又有什么差别? 
    回答:在数据库中定义的存储过程执行比在程序中执行效率一定会高的,这个可以通过试验确认。问题2:是不是对于数据层的编写,尽量使用存储过程来代替基本的SQL语句? 
    回答:不是,要根据项目具体情况来看。譬如,如果项目需要一直到其他数据库下运行编写过多存储过程在移植过程中会比较麻烦。问题3:不知道大家在开发中,对数据层操作数据库代码的编写有什么好的习惯? 
    回答:通编码规范,呵呵。
      

  4.   

    1.以前做个一个项目是asp.net的,数据库操作全部采用存储过程。这有优点也有缺点,优点是整齐,比如查询的错误或者什么,直接在数据库端修改就行了。缺点么,如果一个存储过程中,参与了太多的判断,来组装执行一个sql的话,这样就有可能需要传递很多的参数进去判断,不如在逻辑中直接使用StringBuffer处理方便。
    2.至于性能方面,我觉得基本差不多,感觉执行单独sql的时候更快些。
     如果我要修改一个表中某些记录的一个字段sql:update XXX set xxx=1111 where id=id1;
    如果采用存储过程的话,如果执行多次,那么可能循环要调用多次存储过程。
    然而你在程序中完全可以使用循环先组装出一条sql:update XXX set xxx=1111  where id in(id1,id2,id3.....);然后统一执行,这样效率就会大大的提高!