oracle判断数据是否存在吗_如何判断数据是否在表中存在?

我们从这里可以看出fetch  cursor 并不比 count .....  rownum = 1  快

SQL> set serverout on

SQL> declare

2  n_cursor number;

3  n_count_rownum  number;

4  n_count  number;

5  n_time1 number;

6  n_time2 number;

7  n_time3 number;

8  n_time4 number;

9  cursor c is select object_id from t;

10  begin

11  n_time1 := dbms_utility.get_time;

12  select count(*) into n_count from t;

13  n_time2 := dbms_utility.get_time;

14

15  for i in 1..100000 loop

16  open c;

17  fetch c into n_cursor;

18  close c;

19  end loop;

20  n_time3 := dbms_utility.get_time;

21

22  for i in 1..100000 loop

23  select count(*) into n_count_rownum from t where rownum = 1;

24  end loop;

25

26  n_time4 := dbms_utility.get_time;

27

28  dbms_output.put_line('count: '||to_char(n_count));

29

30  dbms_output.put_line('count all  time : '||to_char(n_time2 - n_time1));

31  dbms_output.put_line(' cursor time: '||to_char(n_time3 - n_time2));

32  dbms_output.put_line('count rownum = 1 time: '||to_char(n_time4 - n_time3));

33

34

35  end;

36  /

count: 25377    -----------  t 表总记录数

count all  time : 1  ----------  count  all  消耗时间

cursor time: 2497   ----- 10万次通过 fetch  cursor 判定是否有记录时间

count rownum = 1 time: 2352  ---------  10万次通过 select count(*) from T where rownum = 1 判定是否有记录消耗时间

PL/SQL procedure successfully completed.

SQL>

下面是当表中不存在记录的时候消耗的时间

SQL> truncate table t;

Table truncated.

SQL> declare

2  n_cursor number;

3  n_count_rownum  number;

4  n_count  number;

5  n_time1 number;

6  n_time2 number;

7  n_time3 number;

8  n_time4 number;

9  cursor c is select object_id from t;

10  begin

11  n_time1 := dbms_utility.get_time;

12  select count(*) into n_count from t;

13  n_time2 := dbms_utility.get_time;

14

15  for i in 1..100000 loop

16  open c;

17  fetch c into n_cursor;

18  close c;

19  end loop;

20  n_time3 := dbms_utility.get_time;

21

22  for i in 1..100000 loop

23  select count(*) into n_count_rownum from t where rownum = 1;

24  end loop;

25

26  n_time4 := dbms_utility.get_time;

27

28  dbms_output.put_line('count: '||to_char(n_count));

29

30  dbms_output.put_line('count all  time : '||to_char(n_time2 - n_time1));

31  dbms_output.put_line(' cursor time: '||to_char(n_time3 - n_time2));

32  dbms_output.put_line('count rownum = 1 time: '||to_char(n_time4 - n_time3));

33

34

35  end;

36  /

count: 0

count all  time : 0

cursor time: 2902

count rownum = 1 time: 2427

PL/SQL procedure successfully completed.

SQL>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值