批处理SQL语句的履行效率提高的办法[MSSQL防范]
本文“批处理SQL语句的履行效率提高的办法[MSSQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
下面为您介绍批处理SQL语句的履行效率提高的办法,供您参考,假如您在大量数据集合履行操作的优化方面碰到干涉题,无妨一看,相信会对您学习SQL语句的优化会大有帮忙.
假如你的项目要求你的程序对高达几万条的数据在集合的时间内履行固定序列的操作,且不能完好利用存储历程时而需求利用程序来履行时.会需求这些优化.
我们知道,SQL服务器对一条语句的履行,需求解析、编译、履行这些步骤,通过参数化我们可以对一种号令只解析和编译一次,而履行多次,从而提高效率.在履行时,假如每次提交语句,可以完成多条SQL语句,则可以削减通讯时间,也可以提高效率.
通过 System.Data.IDbCommand.Prepare() 办法,我们可以在第一次履行语句时,解析和编译SQL语句,然后保存这个Command对象,下次利用时,直接设置参数履行.这个办法对Oracle和MsSql Server都有效.
假如履行一批语句,在T-SQL和PLSQL中有一点不一样.
在T-SQL中,多条SQL语句之间,利用分号";"脱离就行.
delete from TableA where id = @id;update TableB set Name=@name where id=@id
而在PLSQL中,则需求用 begin ... end; 包起来,中间语句用分号";"脱离.
begin delete from TableA where id = :id;update TableB set Name=:name where id=:id; end;
相信这样做之后,你的效率会有几倍大概十几倍的晋升.当然,你还可以对只是查而改正的表,做一下缓存处理,来减小拜候数据库的次数.
下面我示例一下拜候Oracle履行PLSQL的一个函数的例子:
private void DeleteFlowInstanceData(string flowinstanceid)
{
OracleCommand cmd = this.cmdDeleteFlowInstanceData;
if(cmd == null)
{
//生成SQL
StringBuilder sb = new StringBuilder();
sb.Append("begin ");
sb.Append(@"delete from bak_WF_Log_EngineLog where FlowInstanceID= :instanceId;");
sb.Append(@"delete from bak_WF_Log_ErrLog where FlowInstanceID= :instanceId;");
sb.Append(@"delete from WF_Running_MsgForEngineBak where FlowInstanceID= :instanceId;");
sb.Append(@"delete from bak_WF_Running_MsgForUser where FlowInstanceID= :instanceId;");
sb.Append(@"delete from bak_WF_Running_FlowActivity where FlowInstanceID= :instanceId;");
sb.Append(@"delete from bak_WF_Running_FlowData where FlowInstanceID= :instanceId;");
sb.Append(@"delete from bak_WF_Running_FlowInstance where FlowInstanceID= :instanceId;");
sb.Append("end;");
//预备 DbCommand
this.cmdDeleteFlowInstanceData = cmd = new OracleCommand();
cmd.Connection = this.connEngine;
cmd.CommandType = CommandType.Text;
cmd.CommandText = sb.ToString();
cmd.Parameters.Clear();
cmd.Parameters.Add("instanceId", OracleType.VarChar,250);
//预备一下以提高性能.
cmd.Prepare();
}
//设置参数
cmd.Parameters["instanceId"].Value = flowinstanceid;
//设置事件
cmd.Transaction = this.tranEngine;
cmd.ExecuteNonQuery();
}
以上是“批处理SQL语句的履行效率提高的办法[MSSQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |