Oracle语句优化规则汇总(8)

来源:qqread 作者:佚名 2008-02-19 出处:pcdog.com

access  oracle  
下一页 1 2 3 4 5 
1. 用UNION替换OR (适用于索引列)

  通常情况下, 用UNION替换WHERE子句中的OR将会起到较好的效果。 对索引列使用OR将造成全表扫描。注意, 以上规则只针对多个索引列有效。 如果有column没有被索引, 查询效率可能会因为你没有选择OR而降低。

  在下面的例子中, LOC_ID 和REGION上都建有索引。

  高效:

  SELECT LOC_ID , LOC_DESC , REGION
  FROM LOCATION
  WHERE LOC_ID = 10
  UNION
  SELECT LOC_ID , LOC_DESC , REGION
  FROM LOCATION
  WHERE REGION = “MELBOURNE”

  低效:

  SELECT LOC_ID , LOC_DESC , REGION
  FROM LOCATION
  WHERE LOC_ID = 10 OR REGION = “MELBOURNE”

  如果你坚持要用OR, 那就需要返回记录最少的索引列写在最前面。

  注意:

  WHERE KEY1 = 10 (返回最少记录)

  OR KEY2 = 20 (返回最多记录)

  ORACLE 内部将以上转换为

  WHERE KEY1 = 10 AND((NOT KEY1 = 10) AND KEY2 = 20)

  :

  下面的测试数据仅供参考: (a = 1003 返回一条记录 , b = 1 返回1003条记录)


更多内容请看PCdog.com--性能调优专题
下一页 1 2 3 4 5 
上一篇:Oracle语句优化规则汇总(9)
下一篇:Oracle语句优化规则汇总(7)