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绑定,这样子执行起来肯定会比较快。