自己在建表的時候,用到了編號的這個欄位,
主要問題是要用java串連資料庫,所以要有pojo類,
就像 編號 這種欄位,int 不夠,long 轉起來麻煩,還容易出錯。
突然想看看char可不可以,所以就稀裡糊塗的想看看,這幾種資料類型的尋找效率究竟如何。
--首先總要先建立一張表吧(如果有重複的話,先刪掉...)
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)
);
--必然要有需要的資料類型 char number varchar2
--下面可以插入資料了,建一個plsql語句塊,執行一下就可以。
declare
v_temp yard_test%rowtype;
v_begin_time timestamp := systimestamp;
v_end_time timestamp;
v_all_time timestamp;
begin
for i in 1..100 loop
--每一萬條資料提交一次,總共提交100萬次,其實有點多,我都沒耐性等他插入完成就......
for j in 1..10000 loop
v_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;
--本來應該用sequence的,嫌麻煩,直接用select語句取得max值+1 得到了序號...
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);
--插入資料
end loop;
commit;
dbms_output.put_line(v_all_time);
end loop;
dbms_output.put_line(v_all_time);
end;
--好了,可以看看都插入了寫什麼資料,
select * from yard_test;
--下面開始測試
declare
v_beg timestamp;--一定要記好開始時間
v_end timestamp;--和結束時間
v_times number := 100000;
begin
--測試尋找第50000條資料的速度
v_beg := systimestamp;
for i in 1..v_times loop
execute immediate 'select * from yard_test where yrd_num = 50000';
--用execute直接運行sql語句,這裡是通過number尋找資料
end loop;
v_end := systimestamp;
dbms_output.put_line('number 查詢時間 ' || (v_end-v_beg));
v_beg := systimestamp;
for i in 1..v_times loop
execute immediate 'select * from yard_test where yrd_id = ''4A6585C231B64BD1B5A981EDD8079990''';
end loop;
v_end := systimestamp;
dbms_output.put_line('char 查詢時間 ' || (v_end-v_beg));
v_beg := systimestamp;
for i in 1..v_times loop
execute immediate 'select * from yard_test where yrd_var = ''18C00CA4677E4BF388BD9F3891BBACA0''';
end loop;
v_end := systimestamp;
dbms_output.put_line('carchar2 查詢時間 ' || (v_end-v_beg));
end;
其實在網上我也發現有其他同學做的測試,結論也都一樣...
都是 char 效率最高,number 其次,最慢的是varchar2,差的也不大,也都能接受。