Oracle部分sql优化

1, 关于not in 和not exists

一直以来,not in 和not exits应该用哪个一直都在争论,当然专业的人都知道要使用noe exists。

通过oracle的执行计划可以发现,not in 会跳过索引走全表扫描,而not exists不会这样子。

2,避免在索引上面使用计算:

在索引上面使用计算会导致索引失效.

SELECT … FROM  DEPT  WHERE SAL * 12 > 25000; 

3,使用 >= 代替 >:

高效:

   SELECT *
   FROM EMP
   WHERE DEPTNO >=4
   
   低效:

   SELECT *
   FROM EMP
   WHERE DEPTNO >3


4,避免使用<>not操作,

select * from employee where salary <> 3000; 


select * from employee where salary<3000 or salary>3000; 

第二种允许在salary上使用索引,而第一种不会。

5,count(*)和count(1)

一般认为count(1)快于count(*),通过对52万条数据的统计发现,两者实际的执行时间相差无几,只有一次count(1)快于count(*),当然对于索引列的执行永远是最快的。

6,字符字段的引号。

如果对于字符字段的索引列不用引号,默认会转型,这样子会导致索引失效。

7,为什么索引列会快?

一直使用索引列,但是为什么索引会快?这是因为索引默认与rowid绑定,这样子执行起来肯定会比较快。








你可能感兴趣的:(Oracle部分sql优化)