您的位置:首页 > 其它

使用索引的误区之二:使用了和!=操作符,导致查询不使用索引

2008-04-26 21:18 447 查看
使用索引误区之二:使用了<>和!=操作符导致查询不使索引
首先,请记住这个结论:

使用了<>和!=后,就不会使用索引

例如,下面的例子使用了<>,所以查询没有用到索引

selectempnofromempwhereempno<>10;

PLAN_TABLE_OUTPUT

--------------------------------------------------------------------------------

--------------------------------------------------------------------

|Id |Operation | Name |Rows |Bytes|Cost |

--------------------------------------------------------------------

| 0|SELECTSTATEMENT | | | | |

|* 1| TABLEACCESSFULL |EMP | | | |

--------------------------------------------------------------------

PredicateInformation(identifiedbyoperationid):

---------------------------------------------------

1-filter("EMP"."EMPNO"<>10)

Note:rulebasedoptimization

14rowsselected

将上面的查条件“empno<>10”转换成“empno<10andempno>10”后,就可以使用索引

selectempnofromempwhereempno<10andempno>10;

PLAN_TABLE_OUTPUT

--------------------------------------------------------------------------------

--------------------------------------------------------------------

|Id |Operation | Name |Rows |Bytes|Cost |

--------------------------------------------------------------------

| 0|SELECTSTATEMENT | | | | |

|* 1| INDEXRANGESCAN |EMP_ID1 | | | |

--------------------------------------------------------------------

PredicateInformation(identifiedbyoperationid):

---------------------------------------------------

1-access("EMP"."EMPNO">10AND"EMP"."EMPNO"<10)

Note:rulebasedoptimization

14rowsselected

SQL>

再看下面的例子:

由于使用了前导列,所以使用了索引,后面的"!="是从索引范围扫描的结果中筛选合适的记录的

selectempnofromempwhereempno<=10andename!='RICH';

PLAN_TABLE_OUTPUT

--------------------------------------------------------------------------------

--------------------------------------------------------------------

|Id |Operation | Name |Rows |Bytes|Cost |上一页
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐