none
存储过程和构造SQL语句如何取舍? RRS feed

  • 问题

  • 今天做网站开发的时候,老大跟我说从性能以及其他方面的考虑,一般使用构造SQL语句。
    我很疑惑,从执行速率和减轻网络数据流量方面来说,存储过程不是比构造SQL语句性能更好么?
    那我们以后的开发过程中,我们到底是应该优先使用那种方式呢?
    2009年5月14日 1:20

答案

  • 今天做网站开发的时候,老大跟我说从性能以及其他方面的考虑,一般使用构造SQL语句。 这个是完全错误地


    如果是 sql server  数据库  sql native client driver  确实可以在本地编译后传输  减少sqlsever 的消耗  但是这样本质上并不能提高什么效率  只能说没有太浪费


    构造 sql语句   就是把 参数和语句完全连接成一个字符串 然后放在 sqlcommand 中运行  这样非常容易注入

    追求全面的速度的话  自然要用存储过程  毕竟是在服务器上编译好的程序缓存 运行效率的确很优异。 而且有一些逻辑可以直接在数据服务器的存储过程中修改而不需要重新发布整个应用

    使用    参数化sql command /sql dataadapter 是一般网站推荐的折中做法  
    这样可以在一定程度上防止注入 这样可以减少  sqlserver 上 存储过程的维护量    通过一个web工程的协同维护完成整个解决方案 


    有效回复过700 撒花
    2009年5月14日 2:52
    版主
  • 你好!
         实际上两种方法各有优缺点,需要根据具体应用场景来选择使用那种技术!
         存储过程虽然可以减轻网络流量,但是缺点是不够灵活,一旦定义好了,就不能动态改变了,如果数据访问逻辑需要动态调整查询等,他就无能为力了,而且都使用存储过程也会另存储空间膨胀!
         而动态构造sql就比较灵活了,可以动态调整一些命令!
         如果是相对固定的数据访问逻辑固定的部分可以定义存储过程,多变的情况下可以构造SQL
    周雪峰
    2009年5月14日 2:54
    版主
  • 构造SQL同样可以使用参数的
    知识改变命运,奋斗成就人生!

    只要有字符串拼接  注入就是有机会的 。 
    有效回复过700 撒花
    2009年5月14日 4:44
    版主

全部回复

  • 动态构造SQL,借助于 C# 语法的便利,使得动态构造SQL更具灵活性,针对具体业务情况动态的增加 Where 条件,动态构造列,灵活的使用各种 函数(如是sum, group by) 等,达到复杂业务的实现, 而这些在存储过程中实现是比较费力的,当然一般情况下还是建议使用存储过程


    知识改变命运,奋斗成就人生!
    2009年5月14日 1:40
    版主
  • 今天做网站开发的时候,老大跟我说从性能以及其他方面的考虑,一般使用构造SQL语句。 这个是完全错误地


    如果是 sql server  数据库  sql native client driver  确实可以在本地编译后传输  减少sqlsever 的消耗  但是这样本质上并不能提高什么效率  只能说没有太浪费


    构造 sql语句   就是把 参数和语句完全连接成一个字符串 然后放在 sqlcommand 中运行  这样非常容易注入

    追求全面的速度的话  自然要用存储过程  毕竟是在服务器上编译好的程序缓存 运行效率的确很优异。 而且有一些逻辑可以直接在数据服务器的存储过程中修改而不需要重新发布整个应用

    使用    参数化sql command /sql dataadapter 是一般网站推荐的折中做法  
    这样可以在一定程度上防止注入 这样可以减少  sqlserver 上 存储过程的维护量    通过一个web工程的协同维护完成整个解决方案 


    有效回复过700 撒花
    2009年5月14日 2:52
    版主
  • 你好!
         实际上两种方法各有优缺点,需要根据具体应用场景来选择使用那种技术!
         存储过程虽然可以减轻网络流量,但是缺点是不够灵活,一旦定义好了,就不能动态改变了,如果数据访问逻辑需要动态调整查询等,他就无能为力了,而且都使用存储过程也会另存储空间膨胀!
         而动态构造sql就比较灵活了,可以动态调整一些命令!
         如果是相对固定的数据访问逻辑固定的部分可以定义存储过程,多变的情况下可以构造SQL
    周雪峰
    2009年5月14日 2:54
    版主
  • 构造SQL同样可以使用参数的
    知识改变命运,奋斗成就人生!
    2009年5月14日 2:54
    版主
  • 构造SQL同样可以使用参数的
    知识改变命运,奋斗成就人生!

    只要有字符串拼接  注入就是有机会的 。 
    有效回复过700 撒花
    2009年5月14日 4:44
    版主