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,差的也不大,也都能接受。

版权声明:本文为博主原创文章,未经博主允许不得转载。

数据库中的char类型的字段与number,varchar类型字段查询

oracle 的char 类型字段,在数据库中是固定长度的,而varchar2类型的是长度是可以变化的。假设某个字段的类型为char(20),这时将‘abc’保存到这个字段后,其实在数据库中保存的字符...
  • changzi41
  • changzi41
  • 2015年08月05日 15:09
  • 1621

Oracle的几个Function实例

create or replace function str_list2( key_name in varchar2, key in varchar2, ...
  • jumtre
  • jumtre
  • 2014年07月24日 21:19
  • 6587

Oracle的数据类型转换 to_char(date)

Oracle的数据类型转换 to_char(date) Oracle的数据类型转换 Oracle的数据类型转换分为显式数据类型转换和隐式类型转换 在通常情况下,隐式数据类型转换是可用的...
  • haiross
  • haiross
  • 2014年03月21日 16:57
  • 1492

oracle char与varchar2的比较与使用

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

oracle常见问题:varchar2 char的区别

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

Oracle char 与 varchar2的区别

char和Varchar2在Oracle的内部存储格式都一样都是数据长度length+实际数据data,其中数据长度length用1-3个字节表示,length255用3个字节表示。 Thomas ...
  • chensrao
  • chensrao
  • 2011年02月19日 17:21
  • 1175

oracle中char和varchar2数据类型的区别

Oracle中char和varchar2数据类型有什么区别?有数据”test”分别存放到char(10)和varchar2(10) 类型的字段中,其存储长度及类型有何区别? 首先解释一下: CH...
  • David_Tsai23
  • David_Tsai23
  • 2013年01月02日 19:36
  • 760

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

申明:这里只说了两种库的连接方式下。char和varchar类型作为检索条件时的差异                       1,Statement stmt0=conn.prepareStat...
  • showerlove
  • showerlove
  • 2012年05月29日 10:55
  • 824

oracle中char与varchar2的区别

oracle中char与varchar2的区别      1. CHAR的长度是固定的,而VARCHAR2的长度是可以变化的,比如,存储字符串“abc",对于CHAR(20),表示你...
  • wangchunyu11155
  • wangchunyu11155
  • 2016年12月14日 11:24
  • 134

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

oracle中三大类型与隐式数据类型转换 (1)varchar2变长/char定长-->number,例如:'123'->123 (2)varchar2/char-->date,例如:'25-4月-1...
  • kevin_love_it
  • kevin_love_it
  • 2017年03月07日 11:52
  • 453
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Oracle 的 char number varchar2 效率测试
举报原因:
原因补充:

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