同样功能的SQL语句,写成参数和写成常量怎么效率会有那么大的差别
2007-08-31 17:34
337 查看
今天写一个存储过程,由于执行的时间比较长(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,22) IN (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,22) IN (SELECT @mis_company_code+'.105301.'+mis_code
FROM finance_budget_account
WHERE (budget_type = '电路租费'))
比较这两段SQL.我们只是将其中的一个字符串'3810'写成了参数的形式,但是执行的效率就完全不一样了.
第二种SQL语句花费了7秒钟的时间.
为什么同样的SQL语句,执行效率相差那么大拉?
现在有一个表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 = '电路租费')
以上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,22) IN (SELECT @mis_company_code+'.105301.'+mis_code
FROM finance_budget_account
WHERE (budget_type = '电路租费'))
比较这两段SQL.我们只是将其中的一个字符串'3810'写成了参数的形式,但是执行的效率就完全不一样了.
第二种SQL语句花费了7秒钟的时间.
为什么同样的SQL语句,执行效率相差那么大拉?
相关文章推荐
- 同样功能的SQL语句,写成参数和写成常量怎么效率会有那么大的差别
- 同样功能的SQL语句,写成参数和写成常量怎么效率会有那么大的差别
- mybatis sql in 查询(mybatis sql语句传入参数是list)mybatis中使用in查询时in怎么接收值
- OPTION(RECOMPILE)提高带参数执行SQL语句的索引效率
- mybatis多个参数类型不同,sql语句中paramterType怎么写?
- C#中SQL语句参数写法
- 处理动态SQL语句的参数
- 使用参数化SQL语句进行模糊查找
- 如何测试sql语句性能,提高执行效率
- 关于临时表使用,今天突然用到了临时表,一些sql语句顿时都想不起怎么来写了,今天请教同事头弄完了,特此整理下。
- SQL 2000 如何优化查询语句,提高查询效率.
- Oracle带参数的sql语句脚本 转 Oracle存储过程 ---Python实现
- IBatis.Net系列-多参数的SQL语句的配置
- 根据参数指定的列名和值查询员工信息(使用动态sql语句)
- 巧用数据库SQL语句的“连接查询”功能
- 简单高效防注入攻击的动态多参数、动态SQL语句拼接方法,提高网站的安全性
- 用脚本生成授权语句,输入参数包括用户名、IP、数据库名、要求的权限列表,输出为授权sql
- sql语句的优化分析之一查询语句中左连接和函数效率分析比较
- 怎样的sql语句才能提高数据库执行效率---索引篇
- 打印全部的sql语句,会把参数换成真正的值