生活随笔
收集整理的這篇文章主要介紹了
Oracle 的 char number varchar2 效率测试
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
自己在建表的時(shí)候,用到了編號(hào)的這個(gè)字段,
主要問(wèn)題是要用java連接數(shù)據(jù)庫(kù),所以要有pojo類,
就像 編號(hào) 這種字段,int 不夠,long 轉(zhuǎn)起來(lái)麻煩,還容易出錯(cuò)。
突然想看看char可不可以,所以就稀里糊涂的想看看,這幾種數(shù)據(jù)類型的查找效率究竟如何。
--首先總要先建立一張表吧(如果有重復(fù)的話,先刪掉...)
drop table yard_test;
create table yard_test (yrd_id char(32),yrd_num number,yrd_var varchar2(32),into_time date,yrd_txt varchar2(4000)
);--必然要有需要的數(shù)據(jù)類型 char number varchar2--下面可以插入數(shù)據(jù)了,建一個(gè)plsql語(yǔ)句塊,執(zhí)行一下就可以。
declarev_temp yard_test%rowtype;v_begin_time timestamp := systimestamp;v_end_time timestamp;v_all_time timestamp;
begin
for i in 1..100 loop--每一萬(wàn)條數(shù)據(jù)提交一次,總共提交100萬(wàn)次,其實(shí)有點(diǎn)多,我都沒(méi)耐性等他插入完成就......for j in 1..10000 loopv_temp.yrd_id := sys_guid();v_temp.yrd_var := sys_guid();select nvl(max(yrd_num),0)+1 into v_temp.yrd_num from yard_test;--本來(lái)應(yīng)該用sequence的,嫌麻煩,直接用select語(yǔ)句取得max值+1 得到了序號(hào)...v_temp.yrd_txt := substr(sys_guid(),1,1);insert into yard_test values(v_temp.yrd_id,v_temp.yrd_num,v_temp.yrd_var,systimestamp,v_temp.yrd_txt);v_end_time := systimestamp;v_all_time := v_all_time + (v_end_time - v_begin_time);--插入數(shù)據(jù)end loop;commit;dbms_output.put_line(v_all_time);
end loop;
dbms_output.put_line(v_all_time);
end;--好了,可以看看都插入了寫(xiě)什么數(shù)據(jù),
select * from yard_test;--下面開(kāi)始測(cè)試
declarev_beg timestamp;--一定要記好開(kāi)始時(shí)間v_end timestamp;--和結(jié)束時(shí)間v_times number := 100000;
begin--測(cè)試查找第50000條數(shù)據(jù)的速度v_beg := systimestamp;for i in 1..v_times loopexecute immediate 'select * from yard_test where yrd_num = 50000';--用execute直接運(yùn)行sql語(yǔ)句,這里是通過(guò)number查找數(shù)據(jù)end loop;v_end := systimestamp;dbms_output.put_line('number 查詢時(shí)間 ' || (v_end-v_beg));v_beg := systimestamp;for i in 1..v_times loopexecute immediate 'select * from yard_test where yrd_id = ''4A6585C231B64BD1B5A981EDD8079990''';end loop;v_end := systimestamp;dbms_output.put_line('char 查詢時(shí)間 ' || (v_end-v_beg));v_beg := systimestamp;for i in 1..v_times loopexecute immediate 'select * from yard_test where yrd_var = ''18C00CA4677E4BF388BD9F3891BBACA0''';end loop;v_end := systimestamp;dbms_output.put_line('carchar2 查詢時(shí)間 ' || (v_end-v_beg));
end;
其實(shí)在網(wǎng)上我也發(fā)現(xiàn)有其他同學(xué)做的測(cè)試,結(jié)論也都一樣...
都是 char 效率最高,number 其次,最慢的是varchar2,差的也不大,也都能接受。
總結(jié)
以上是生活随笔為你收集整理的Oracle 的 char number varchar2 效率测试的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。