同样功能的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,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语句,执行效率相差那么大拉? 

时间: 2024-08-26 21:57:26

同样功能的SQL语句 写成参数和写成常量的差别的相关文章

sql语句的写法要怎么样写才能达到

问题描述 sql语句的写法要怎么样写才能达到 表a有字段id,p1,p2,p3,p4.......,表b有字段id,m a表数据, b表数据 111, 1,2,3,4........ 1,红 2,黄 3,蓝 4,白 a.p1=b.m,a.p2=b.m 想查询出 111,红,2,黄,3,蓝,4,白 等方式语句如何写 解决方案 111,红,2,黄,3,蓝,4,白 等方式语句如何写 select a.id,(select m from b where b.id=a.p1),a.p1,(select m

同样功能的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编码就

SQL语句里的参数

问题描述 我想请教一下如何使用带有参数的SQL语句-例如:SqlConnectioncon=newSqlConnection("server=.;database=XXX;uid=sa;pwd=;");con.Open();SqlCommandcmd=newSqlCommand;cmd.commandtext="SELECT*whrereid=@ID";--------SqlDataReadersdr=cmd.ExecuteReader();sdr.read();-

在c#中执行sql语句时传递参数的小经验

sql|语句|执行 c#中与数据库打交道,免不了要用到各种sql语句,而给sql语句传参数也是不可避免的.以下是我在此方面上的一点总结(高手勿见笑): 1> 直接写入法:      例如:             int Id =1;             string Name="lui";             cmd.CommandText="insert into TUserLogin values("+Id+",'"+Name

还是向sql语句中传递参数的问题??…………

问题描述 1.SqlConnectionconn1=newSqlConnection("database=charm;server=sql8;user=sa;pwd=8");2.stringsql1="wheregdcode='"+x+"'";3.SqlDataAdapterSqlDataAdapter1=newSqlDataAdapter("selectgdcode,gdno,gddesc,gdunit,gdpricfromslgoo

C#控制台做ATM,SQLserver表已经创建好了,在vs2010代码里面写SQL语句时,该怎么写?我思路现在蛮混乱

问题描述 //第一步:指定连接的数据库SqlConnectionconn=newSqlConnection("server=HHY-PC\HHY;uid=sa;pwd=123456;database=YangATM_DB");//第二步:需要执行的SQL语句stringsql="select*fromKaiHuInFowhereKaHao='"+txtkahao.Text+"'andKaMiMa='"+txtmima.Text+"'&q

iBATIS.net获取运行时sql语句(带参数)

问题描述 获取的SQL语句是SELECT*fromtab_nameWHEREId=:param0andname=:param1希望转成SELECT*fromtab_nameWHEREId='qqqqq'andname='张三'有个人建议是用工具来实现.不过我还是想问下有没其他方式通过代码来获取"Batis打印出来的参数化PreparedSql内部是通过拼接字符串构造SQL语句的,类似于ADO.Net常见的DbCommand里的CommandText,实际执行的SQL语句只能通过数据库工具获取,比

请教大虾:向SQL语句中传递参数的问题

问题描述 1.SqlConnectionconn1=newSqlConnection("database=charm;server=sql8;user=sa;pwd=8");2.this.mA=newSqlDataAdapter("selectgdcode,gdno,gddesc,gdunit,gdpricfromslgoodsql1",conn1);3.stringsql1="wheregdcode='"+combo1+"'"

c#使用时sql语句中的参数没有被替换

问题描述 usingSystem.Data.OracleClient;stringconnString="DataSource=orcl;UserID=c##bruce;Password=oracle;";stringcmdString="SELECTSWJG_MCFROMDM_SWJGWHERE(SWJG_DM=:Param_SWJG_DM)";strings_swjg_mc="a";OracleConnectionconnection=new