最近要优化Oracle数据库的效率,然后在网上查了很多判断记录是否存在的高效率方法
网上有很多的建议第一种方法,我做了一个测试,但是可能数据量不够大,42667条记录,不知道很大的数据量是什么一个情况网上好多高效的建议方式
select * from item where item='1B241371X0021' and rownum<2;
但是我测试的结果:
select * from item where item='1B241371X0021' and rownum<2;1 rows selected in 0.047 secondscount(*) 方式
select count(*) from item where item='1B241371X0021';1 rows selected in 0.016 secondsexists方式
select count(*) from dual where exists(select 1 from item where item='1B241371X0021');1 rows selected in 0.015 seconds从测试的结果看,后两种方式比前一种方式的效率明显要高.
网上有很多的建议第一种方法,我做了一个测试,但是可能数据量不够大,42667条记录,不知道很大的数据量是什么一个情况网上好多高效的建议方式
select * from item where item='1B241371X0021' and rownum<2;
但是我测试的结果:
select * from item where item='1B241371X0021' and rownum<2;1 rows selected in 0.047 secondscount(*) 方式
select count(*) from item where item='1B241371X0021';1 rows selected in 0.016 secondsexists方式
select count(*) from dual where exists(select 1 from item where item='1B241371X0021');1 rows selected in 0.015 seconds从测试的结果看,后两种方式比前一种方式的效率明显要高.
后两种的效率比第一种要高
后两种根据索引判断返回个数,第一种要访问表查出具体的记录数据
你试试
select 1 from item where item='1B241371X0021' and rownum =1
试试这个如何
这个的效率介于第一种和二种中间,0.031seconds
http://topic.csdn.net/u/20090617/16/401ea743-48fa-4449-ab85-6e955fea1a01.html
还是这种方法好。。
这个sql语句,为什么用表item='1B241371X0021'来判断呢,item不是表名字吗?item是字段?
1、如何查询结果不存在,这三种查询方法效率相差不多。
2、在有查询结果时,第一种与第三种select * from item where item='1B241371X0021' and rownum <2; select count(*) from dual where exists(select 1 from item where item='1B241371X0021');
效率较高,
count(*) 方式
select count(*) from item where item='1B241371X0021';
效率较差。
从常识上理解也是这样,第一种与第三种方法只要找到第一条记录即可,第二种方法要找到所有记录,所以要慢,除非只有一条符合条件的记录。