7种判断大表是否有数据办法效率比较

1、准备大表large_table

create table large_table as
  select * from SYS.SOURCE$;
insert into large_table
  select * from SYS.SOURCE$;
analyze table large_table compute statistics;
select num_rows, table_name
  From user_tables
 where table_name = 'LARGE_TABLE';

本例中LARGE_TABLE表共有1195684 行

2、7种方法效率测试

     连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> set timing on
SQL> alter system flush buffer_cache;

系统已更改。

已用时间:  00: 00: 00.03

==========================排名第1:  00: 00: 00.00==========================

SQL> alter system flush buffer_cache;

系统已更改。

已用时间:  00: 00: 00.01
SQL> declare
  2  i int;
  3  begin
  4  select count(*) into i from LARGE_TABLE where rownum=1;--判断是否有数据5(隐式游标)
  5  if sql%found then
  6  dbms_output.put_line('LARGE_TABLE exists data.');
  7  else
  8  dbms_output.put_line('LARGE_TABLE no data.');
  9  end if;
 10  end;
 11  /

PL/SQL 过程已成功完成。

已用时间:  00: 00: 00.00

==========================排名第2:  00: 00: 00.03==========================
SQL> alter system flush buffer_cache;

系统已更改。

已用时间:  00: 00: 00.01
SQL> declare
  2  i int;
  3  begin
  4  select count(1) into i from LARGE_TABLE where rownum=1;--判断是否有数据3
  5  if i<>0 then
  6  dbms_output.put_line('LARGE_TABLE exists data.');
  7  else
  8  dbms_output.put_line('LARGE_TABLE no data.');
  9  end if;
 10  end;
 11  /

PL/SQL 过程已成功完成。

已用时间:  00: 00: 00.03

==========================排名第3:  00: 00: 00.04==========================

SQL> alter system flush buffer_cache;

SQL> begin
  2  for i in (select 1 from LARGE_TABLE where rownum=1) loop--判断是否有数据7(隐式游标)
  3  dbms_output.put_line('LARGE_TABLE exists data.');
  4  end loop;
  5  end;
  6  /

PL/SQL 过程已成功完成。

已用时间:  00: 00: 00.04
SQL> /

PL/SQL 过程已成功完成。

已用时间:  00: 00: 00.00
SQL> alter system flush buffer_cache;

系统已更改。

已用时间:  00: 00: 00.01
==========================排名第3:  00: 00: 00.04==========================

SQL> declare
  2  cursor c1 is select 1 from LARGE_TABLE where rownum=1;
  3  i int;
  4  begin
  5  open c1;
  6  fetch c1 into i;
  7  if c1%found then--判断是否有数据6(显式游标)
  8  dbms_output.put_line('LARGE_TABLE exists data.');
  9  else
 10  dbms_output.put_line('LARGE_TABLE no data.');
 11  end if;
 12  close c1;
 13  end;
 14  /

PL/SQL 过程已成功完成。

已用时间:  00: 00: 00.04
SQL> /

PL/SQL 过程已成功完成。

已用时间:  00: 00: 00.00

==========================排名第3:  00: 00: 00.04==========================

SQL> alter system flush buffer_cache;

系统已更改。

已用时间:  00: 00: 00.01
SQL> declare
  2  i int;
  3  begin
  4  select count(1) into i from LARGE_TABLE where rownum=1;--判断是否有数据4(隐式游标)
  5  if sql%found then
  6  dbms_output.put_line('LARGE_TABLE exists data.');
  7  else
  8  dbms_output.put_line('LARGE_TABLE no data.');
  9  end if;
 10  end;
 11  /

PL/SQL 过程已成功完成。

已用时间:  00: 00: 00.04
SQL> /

PL/SQL 过程已成功完成。

已用时间:  00: 00: 00.00

==========================排名第4:  00: 00:05.47==========================

SQL> alter system flush buffer_cache;

系统已更改。

已用时间:  00: 00: 00.01
SQL> declare
  2  i int;
  3  begin
  4  select count(1) into i from LARGE_TABLE;--判断是否有数据2
  5  if i<>0 then
  6  dbms_output.put_line('LARGE_TABLE exists data.');
  7  else
  8  dbms_output.put_line('LARGE_TABLE no data.');
  9  end if;
 10  end;
 11  /

PL/SQL 过程已成功完成。

已用时间:  00: 00: 05.47
==========================排名第5: 00: 00: 09.57==========================

SQL> alter system flush buffer_cache;

系统已更改。

已用时间:  00: 00: 00.01
SQL> declare
  2  i int;
  3  begin
  4  select count(*) into i from LARGE_TABLE;--判断是否有数据1
  5  if i<>0 then
  6  dbms_output.put_line('LARGE_TABLE exists data.');
  7  else
  8  dbms_output.put_line('LARGE_TABLE no data.');
  9  end if;
 10  end;
 11  /

PL/SQL 过程已成功完成。

已用时间:  00: 00: 09.57

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值