SQL语句编写注意问题

1)IS NULL 与 IS NOT NULL
  任何SQL语句,只要在where子句中使用了is null或is not null,那么Oracle优化器就不允许使用索引了。
 2)联接列(||)
  对于有联接的列,即使最后的联接值为一个静态值,优化器是不会使用索引的,例如
  select *
   from employss
   where first_name||''||last_name ='Beill Cliton';
  此时系统优化器对基于last_name 创建的索引没有使用,应调整为
  select *
   from employss
   where first_name ='Beill' and last_name ='Cliton';
 3)函数的使用
  当有函数作用于索引列上时,索引将失效
 4)带通配符(%)的like 语句
  通配符(%)在搜寻词首出现时,Oracle不能使用索引,例如
  select * from employee where last_name like '%cliton%';
  其它时候则能使用,例如,
  select * from employee where last_name like 'c%';
 5)order by语句
   尽量避免使用表达式,为使用的列建立索引。
 6)NOT
  用于对任何逻辑运算符取反,例如
  where not (status ='VALID')
  <=> where status <>'INVALID'
  此时将不使用索引,例如
  select * from employee where salary<>3000;
  它将不会使用索引,应改成
  select * from employee where salary<3000 or salary>3000;
 7)IN和EXISTS
  尽量使用EXISTS而不是IN
    通过使用EXIST,Oracle 系统会首先检查主查询,然后运行子查询直到它找到第一个匹配项,这就节省了时间。Oracle 系统在执行IN 子查询时,首先执行子查询,并将获得的结果列表存放在在一个加了索引的临时表中。在执行子查询之前,系统先将主查询挂起,待子查询执行完毕,存放在临时表中以后再执行主查询。这也就是使用EXISTS 比使用IN 通常查询速度快的原因。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值