工作中我们常用to_char来转换日期,当然,也可以用Trunc。
今天有一同事说,Trunc性能会高于to_char!
是吗?
不知道,但,我们可以用数据验证一下:
--创建A表
create table a_0507 (
a_id number,
a_birthday varchar2(10)
);
--写入
begin
for v_var in 1 .. 10000000 loop
insert into a_0507 values(v_var, to_char(sysdate, 'YYYY/MM/DD'));
end loop;
end;
23:38:58 SQL> begin
23:39:01 2 for v_var in 1 .. 10000000 loop
23:39:01 3 insert into a_0507 values(v_var, to_char(sysdate, 'YYYY/MM/DD'));
23:39:01 4 end loop;
23:39:01 5 end;
23:39:02 6 /
PL/SQL procedure successfully completed.
23:48:29 SQL> --插入1千万行花了9分27秒
PL/SQL procedure successfully completed.
23:25:19 SQL>
--创建B表
create table b_0508 (
b_id number,
b_create_data varchar2(10)
);
--写入
begin
for v_var in 1 .. 10000000 loop
insert into b_0508 values(v_var, TRUNC(SYSDATE));
end loop;
end;
23:49:30 SQL> begin
23:51:42 2 for v_var in 1 .. 10000000 loop
23:51:42 3 insert into b_0508 values(v_var, TRUNC(SYSDATE));
23:51:42 4 end loop;
23:51:42 5 end;
23:51:44 6 /
PL/SQL procedure successfully completed.
00:01:55 SQL> --插入1千万行花了10分11秒
天啦!
Trunc多花了44秒,真不敢相信,再来跑一次上边的SQL!
结论是。。。跟上一次跑出一样的速度!!!
二张表大小比对:
select * from user_segments where segment_name='A_0507'; --251658240byte
select * from user_segments where segment_name='B_0508'; --243269632byte
select count(1) from A_0507; --10000000
select count(1) from B_0508; --10000000
事实证明,to_char性能略高于Trunc,写1千万数据快了44秒。