高性能sql的编写

1.任何在where子句中使用is null或is not null的语句优化器是不允许使用索引的

2.当采用下面这种SQL语句的编写,Oracle系统就可以采用基于last_name创建的索引。
Select * from employee
where
first_name ='Beill' and last_name ='Cliton';

3.通配符(%)在搜寻词首出现,所以Oracle系统不使用last_name的索,然而当通配符出现在字符串其他位置时,优化器就能利用索引。在下面的查询中索引得到了使用:
select * from employee where last_name like 'c%';

4.where not (status ='VALID') 相当于where status <>;'INVALID';
索引作用情况
select * from employee where salary<>;3000; 不使用索引
select * from employee where salary<3000 or salary>;3000; 允许Oracle对salary列使用索引

5.通过使用EXIST,Oracle系统会首先检查主查询,然后运行子查询直到它找到第一个匹配项,这就节省了时间。Oracle系统在执行IN子查询时,首先执行子查询,并将获得的结果列表存放在在一个加了索引的临时表中。在执行子查询之前,系统先将主查询挂起,待子查询执行完毕,存放在临时表中以后再执行主查询。这也就是使用EXISTS比使用IN通常查询速度快的原因。
同时应尽可能使用NOT EXISTS来代替NOT IN,尽管二者都使用了NOT(不能使用索引而降低速度),NOT EXISTS要比NOT IN查询效率更高。

猜你喜欢

转载自skydove.iteye.com/blog/1041174