使用索引的误区之二:使用了和!=操作符,导致查询不使用索引
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 |上一页
首先,请记住这个结论:
使用了<>和!=后,就不会使用索引
例如,下面的例子使用了<>,所以查询没有用到索引
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 |上一页
相关文章推荐
- 使用索引的误区之二:使用了 和 != 操作符,导致查询不使用索引
- 使用索引的误区之二:使用了 和 != 操作符,导致查询不使用索引
- 使用索引的误区之二:使用了 和 != 操作符,导致查询不使用索引
- 使用索引的误区之二:使用了 和 != 操作符,导致查询不使用索引
- 使用索引的误区之一:没有使用复合索引的前导列导致查询不使用索引
- 使用索引的误区之一:没有使用复合索引的前导列导致查询不使用索引
- 使用索引的误区之一:没有使用复合索引的前导列导致查询不使用索引
- 使用索引的误区之一:没有使用复合索引的前导列导致查询不使用索引
- 使用索引的误区之一:没有使用复合索引的前导列导致查询不使用索引
- 使用索引的误区之一:没有使用复合索引的前导列导致查询不使用索引——oracle
- Mysql多个LEFT JOIN使用ORDER不能使用索引导致查询过慢的解决方案
- 错误使用MySQL前缀索引导致的慢查询
- Mysql多个LEFT JOIN使用ORDER BY不能使用索引导致查询过慢的解决方案
- Mysql多个LEFT JOIN使用ORDER不能使用索引导致查询过慢的解决方案
- PosgreSQL 索引 COLLATE 设置不当导致查询优化无法使用索引
- PosgreSQL 索引 COLLATE 设置不当导致查询优化无法使用索引
- mysql查询索引使用情况
- 测试mysql查询中参数整形和字符串类型错误索引使用情况
- 使用索引来排序查询结果
- 限制索引导致索引无法被使用