13-where与order by以及类型转换
===============
1、使用where替代orader by
order by子句只在两种严格的条件下使用索引
order by中所有的列必须包含在相同的索引中并保持在索引中的排列顺序
order by中所有的列不许定义为非空
where子句使用的索引和order by子句中所使用的索引不能并列
------------------
2、避免改变索引列的类型
当比较不同数据类型的数据时,oracle自动对列进行简单的类型转换
SQL> select count(*) from an1 where id COUNT(*) 已用时间: 00: 00: 00.06 执行计划 ------------------------------------------ 做了隐式转换,但转换的是等式的右边,所以索引依然有效 SQL> select count(*) from an1 where to_number(id)<50000; COUNT(*) 已用时间: 00: 00: 00.04 执行计划 ----------------------------------- 索引无效 ------------------------------ 3、
----------
20001
----------------------------------------------------------
Plan hash value: 4005259610
| Id | Operation | Name |
------------------------------------------
| 0 | SELECT STATEMENT | |
| 1 | SORT AGGREGATE | |
|* 2 | INDEX RANGE SCAN| INDEX_AN1_ID |
------------------------------------------
----------
20001
----------------------------------------------------------
Plan hash value: 2832067379
| Id | Operation | Name |
-----------------------------------
| 0 | SELECT STATEMENT | |
| 1 | SORT AGGREGATE | |
|* 2 | TABLE ACCESS FULL| AN1 |
-----------------------------------
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/13177610/viewspace-676349/ ,如需转载,请注明出处,否则将追究法律责任。