日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
批處理SQL語句的執(zhí)行效率提高的方法

下面為您介紹批處理SQL語句的執(zhí)行效率提高的方法,供您參考,如果您在大量數(shù)據(jù)集中執(zhí)行操作的優(yōu)化方面遇到過問題,不妨一看,相信會對您學習SQL語句的優(yōu)化會大有幫助。

如果你的項目要求你的程序?qū)Ω哌_幾萬條的數(shù)據(jù)在集中的時間內(nèi)執(zhí)行固定序列的操作,且不能完全使用存儲過程時而需要使用程序來執(zhí)行時。會需要這些優(yōu)化。

我們知道,SQL服務器對一條語句的執(zhí)行,需要分析、編譯、執(zhí)行這些步驟,通過參數(shù)化我們可以對一種命令只分析和編譯一次,而執(zhí)行多次,從而提高效率。在執(zhí)行時,如果每次提交語句,可以完成多條SQL語句,則可以減少通訊時間,也可以提高效率。

通過 System.Data.IDbCommand.Prepare() 方法,我們可以在第一次執(zhí)行語句時,分析和編譯SQL語句,然后保存這個Command對象,下次使用時,直接設置參數(shù)執(zhí)行。這個方法對Oracle和MsSql Server都有效。

如果執(zhí)行一批語句,在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;
     相信這樣做之后,你的效率會有幾倍或者十幾倍的提升。當然,你還可以對只是查而修改的表,做一下緩存處理,來減小訪問數(shù)據(jù)庫的次數(shù)。
     下面我示例一下訪問Oracle執(zhí)行PLSQL的一個函數(shù)的例子:
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();
    }

    //設置參數(shù)
    cmd.Parameters["instanceId"].Value =  flowinstanceid;

    //設置事務
    cmd.Transaction = this.tranEngine;

    cmd.ExecuteNonQuery();

}

 

【編輯推薦】

SQL語句中特殊字符的處理方法

教您用SQL語句進行模糊查詢

為您講解SQL動態(tài)語句的語法

SQL2005中的RANK、DENSE_RANK排名函數(shù)

SQL中隨機數(shù)函數(shù)rand()簡介


網(wǎng)站題目:批處理SQL語句的執(zhí)行效率提高的方法
標題來源:http://www.dlmjj.cn/article/copiedc.html