同样功能的SQL语句,写成参数和写成常量怎么效率会有那么大的差别

本文探讨了在SQL查询中使用字符串与参数形式时出现的性能差异现象。通过对两个相似查询的实际测试对比,揭示了即使是微小的变化也可能对执行效率产生显著影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天写一个存储过程,由于执行的时间比较长(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语句,执行效率相差那么大拉? 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值