zoukankan      html  css  js  c++  java
  • 同样功能的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 ,所以写了如下这样的代码:
    select ACC_SEGMENT
    from dbo.mis_gl_balance
    where LEFT(ACC_SEGMENT,22IN (SELECT '3810.105301.'+mis_code
    FROM         finance_budget_account
    WHERE     budget_type = '电路租费')
    以上SQL语句就是把某种电路租费的ACC_SEGMENT全部取出来了.执行效率还能够接收,1秒钟就完成了.
    但是如果改成了如下的代码:
    DECLARE @mis_company_code char(4)
    SET @mis_company_code='3810'
    select ACC_SEGMENT
    from dbo.mis_gl_balance
    where LEFT(ACC_SEGMENT,22IN (SELECT    @mis_company_code+'.105301.'+mis_code
    FROM         finance_budget_account
    WHERE     (budget_type = '电路租费'))
    比较这两段SQL.我们只是将其中的一个字符串'3810'写成了参数的形式,但是执行的效率就完全不一样了.
    第二种SQL语句花费了7秒钟的时间.
    为什么同样的SQL语句,执行效率相差那么大拉?
    【本文章出自博客园深蓝居,转载请注明作者出处,如果您觉得博主的文章对您有很大帮助,欢迎支付宝(studyzy@163.com)对博主进行打赏。】
  • 相关阅读:
    linux shell
    jsp应用
    JavaScript基础整理(2)
    Struts2验证框架实例
    一个Struts2的实例
    Java继承和多态实例
    VS2010webConfig配置
    html兼容性
    Linux 入门记录:一、命令行 Bash 的基本操作
    微信支付:curl 出错,错误码: 60
  • 原文地址:https://www.cnblogs.com/studyzy/p/877523.html
Copyright © 2011-2022 走看看