以程式設計方式使用批語句節省 資料庫 IO 來提高效能

2021-03-31 08:56:58 字數 1927 閱讀 5527

大家都知道在程式中盡量少和資料庫互動是可以

提高程式效能的,

以下舉乙個比較常見的例子

如:需要根據

某條件判斷條記錄是否存在

如果不存在就

插入的這種操作。

一般都會用

2 次資料庫

io ,1次取

count

如果=0

就insert into

其實在oracle, 或sql service

等大型資料庫中可以使用批sql 語句節省資料庫io(和資料庫的互動).

以下例子是乙個簡單的的演示執行一次資料庫io(演示使用

c#+

oracle

資料庫演示,其他語言或sqlservice

也差不多),

適合使用在寫儲存過程沒太大意義的時候。

測試**如下:(注意,測試用的sql語句中注釋過多會影響效能,實際使用不用這麼多注釋)

語句比較簡單,所以沒有把錶結構貼出來,資料庫連線部分省略。

//使用批sql 執行(但不能換行和回車/r/n 不行/n 可以)

//c#

可以用@ 可以直接換行,vb 寫這樣的比較鬱悶所以用c# 作演示

const

string execsql=

@"declare

var_bbsitemid varchar2(12) :=:ipbbsitemid ;/*

傳入引數*/

var_userid varchar2(20) := :ipuserid ;/*

傳入引數*/

var_counts number(10);

begin

/*根據條件取記錄條數*/

select count(t.bbsitemid) into var_counts

from st_bb**rktrsltchk t

where t.userid = var_userid and t.bbsitemid = var_bbsitemid;

/* oracle

列印不知道怎麼看nnd */

dbms_output.put_line('count:'|| var_counts);

/*

如果是0條就插入*/

if var_counts = 0 then

insert into st_bb**rktrsltchk(bbsitemid, userid, read***, lastmodified)

values (var_bbsitemid, var_userid, 0, sysdate);

end if;

end;" ;

//auto --***mit;

//

必須把/r (換行符)去掉 否則oracle 不認而且會報錯。

this.cmd.***mandtext = execsql.replace("/r",string.empty);

cmd.parameters.clear();

oracleparameter par;

//傳引數

par = cmd.parameters.add(":ipbbsitemid",oracletype.varchar);

par.value="0012";

par = cmd.parameters.add(":ipuserid",oracletype.varchar);

par.value="def";

try

catch(exception ex)

}

資料庫基礎 以命令方式建立資料庫

create建立資料庫 注意 以命令的方式建立資料庫使用create database命令,建立前要確保使用者具有建立資料的許可權 create database 資料庫名稱 on primary 資料檔案選項 資料檔案組選項 log on collate 排序名 檔案選項 name 邏輯檔名 fi...

以Ajax的方式訪問資料庫

一 以ajax的方式顯示資料 我們都知道,如果用ajax程式去載入乙個動態頁,則載入的實際上是這個動態頁執行完畢後生成的靜態html 字串。1.以原有的格式顯示資料 header content type text html charset gb2312 include conn.php resul...

常用資料庫分頁語句及資料庫程式設計

取出sql表中第31到40的記錄 以自動增長id為主鍵 sql server 方案1 select top 10 from t where id not in select top 30 id from t order by id orde by id sql server 方案2 select t...