Oracle 的 char number varchar2 效率测试

原创 2013年12月05日 20:46:30

自己在建表的时候,用到了编号的这个字段,

主要问题是要用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 char 与 varchar2的区别

char和Varchar2在Oracle的内部存储格式都一样都是数据长度length+实际数据data,其中数据长度length用1-3个字节表示,length255用3个字节表示。 Thomas ...

oracle常见问题:varchar2 char的区别

区别:1.CHAR的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串“abc”,对于CHAR (20),表示你存储的字符将占20个字节(包括17个空字符),而同样的VARCHAR...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

oracle char与varchar2的比较与使用

最近工作处理了一些有关oracle字符数据类型的问题,特做如下整理,希望和大家共同学习: 一、首先对char与varchar2类型做下比较:(以下部分内容转自华夏名网) 区别:   1.CHAR...

DB2和oracle数据库char和varchar类型作为检索条件时的差异

申明:这里只说了两种库的连接方式下。char和varchar类型作为检索条件时的差异                  ...

oracle中char与varchar2的区别

oracle中char与varchar2的区别      1. CHAR的长度是固定的,而VARCHAR2的长度是可以变化的,比如,存储字符串“abc",对于CHAR(20),表示你...

Oracle字段类型char、varchar2、nvarchar2的区别与使用

四个类型都属于变长字符类型, varchar和varchar2的区别在与后者把所有字符都占两字节,前者只对汉字和全角等字符占两字节。 nvarchar和nvarchar2的区别和上面一样,   与上面...

oracle三大类型(varchar2,number,date)转换

oracle中三大类型与隐式数据类型转换 (1)varchar2变长/char定长-->number,例如:'123'->123 (2)varchar2/char-->date,例如:'25-4月-1...

Oracle char varchar2 nchar nvarchar2 不同

char 固定长度,非 Unicode 字符数据,长度为 n 个字节。n 的取值范围为 1 至 8,000,存储大小是 n 个字节。char 的 SQL 2003 同义词为 character。 ...

由MySQL中char和varchar效率想到的

对比char和varchar随便在google或百度中搜一下得到的结论大概都是"char定长,varchar不定长,char要比varchar占用更多的空间,由于定长char的效率高于varchar,...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)