同样功能的SQL语句,写成参数和写成常量的差别

http://tech.ddvip.com   2008年09月09日    社区交流

本文详细介绍同样功能的SQL语句,写成参数和写成常量的差别

  今天写一个存储过程,由于执行的时间比较长(7秒)所以打算优化一下.结果在优化测试代码中发现如下一个奇怪的现象.

  现在有一个表mis_gl_balance,其中有一个字段ACC_SEGMENT VARCHAR(181) NULL ,他的内容的形式如下:

  3810.105301.5414070180.000000.00000000.0000.000000

  另外一个表finance_budget_account 主要记录了budget_type 预算类型和mis_code MIS系统编码.这里的MIS编码就是ACC_SEGMENT表中的第三段.

  为了查询出某种预算类型的所有ACC_SEGMENT ,所以写了如下这样的代码:

  selectACC_SEGMENT
  fromdbo.mis_gl_balance
  whereLEFT(ACC_SEGMENT,22)IN(SELECT'3810.105301.'+mis_code
  FROM    finance_budget_account
  WHERE  budget_type='电路租费')

  以上SQL语句就是把某种电路租费的ACC_SEGMENT全部取出来了.执行效率还能够接收,1秒钟就完成了.

  但是如果改成了如下的代码:

  DECLARE@mis_company_codechar(4)
  SET@mis_company_code='3810'
  selectACC_SEGMENT
  fromdbo.mis_gl_balance
  whereLEFT(ACC_SEGMENT,22)IN(SELECT  @mis_company_code+'.105301.'+mis_code
  FROM    finance_budget_account
  WHERE  (budget_type='电路租费'))

  比较这两段SQL.我们只是将其中的一个字符串'3810'写成了参数的形式,但是执行的效率就完全不一样了.

  第二种SQL语句花费了7秒钟的时间.

  为什么同样的SQL语句,执行效率相差那么大拉? 

来源:blog.csdn    作者:深蓝居    责编:豆豆技术应用

正在加载评论...