当前位置:  数据库>oracle

Oracle 的 char number varchar2 效率测试

    来源: 互联网  发布时间:2017-05-29

    本文导语: 自己在建表的时候,用到了编号的这个字段, 主要问题是要用java连接数据库,所以要有pojo类, 就像 编号 这种字段,int 不够,long 转起来麻烦,还容易出错。 突然想看看char可不可以,所以就稀里糊涂的想看看,这几种数据类...

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

主要问题是要用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,差的也不大,也都能接受。


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 测试添加Oracle中Blob数据类型对象
  • Oracle融合中间件在Dell服务器上测试创世界纪录
  • oracle group by语句实例测试
  • 三招助你做好Oracle数据库备份测试
  • Oracle Dataguard备库失败与主库响应测试
  • oracle 使用递归的性能提示测试对比
  • oracle 11g 设置用户密码大小写敏感测试
  • oracle—SQL技巧之(一)连续记录查询sql案例测试
  • Oracle数据库异步调用基本原理及测试
  • oracle存储过程中return和exit区别概述及测试
  • 知识进阶 完全了解 Oracle 标签安全测试
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • java/j2ee iis7站长之家
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • Oracle 数据库(oracle Database)性能调优技术详解
  • Linux /$ORACLE_HOME $ORACLE_HOME
  • ORACLE日期相关操作
  • Linux系统下Oracle的启动与Oracle监听的启动
  • ORACLE数据库常用字段数据类型介绍
  • 请问在solaris下安装ORACLE,用root用户和用oracle用户安装有什么区别么?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,