`
orange5458
  • 浏览: 347328 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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 通常查询速度快的原因。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics