自己在建表的时候,用到了编号的这个字段,主要问题是要用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,差的也不大,也都能接受。更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12PL/SQL删除锁表的进程Java调用 Oracle 函数相关资讯 varchar2 Oracle char number
- varchar2转化nvarchar2类型乱码 (12/04/2013 13:15:17)
本文评论 查看全部评论 (0)