现在有一个表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,22) IN (SELECT '3810.105301.'+mis_code
FROM finance_budget_account
WHERE budget_type = '电路租费')但是如果改成了如下的代码:
DECLARE @mis_company_code char(4)
SET @mis_company_code='3810'
select ACC_SEGMENT
from dbo.mis_gl_balance
where LEFT(ACC_SEGMENT,22) IN (SELECT @mis_company_code+'.105301.'+mis_code
FROM finance_budget_account
WHERE (budget_type = '电路租费'))第二种SQL语句花费了7秒钟的时间.
为什么同样的SQL语句,执行效率相差那么大拉?