ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 13-where与order by以及类型转换

13-where与order by以及类型转换

原创 Linux操作系统 作者:安佰胜 时间:2010-10-20 10:33:18 0 删除 编辑


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(*)
----------
     20001

已用时间:  00: 00: 00.06

执行计划
----------------------------------------------------------
Plan hash value: 4005259610

------------------------------------------
| Id  | Operation         | Name         |
------------------------------------------
|   0 | SELECT STATEMENT  |              |
|   1 |  SORT AGGREGATE   |              |
|*  2 |   INDEX RANGE SCAN| INDEX_AN1_ID |
------------------------------------------

做了隐式转换,但转换的是等式的右边,所以索引依然有效

SQL> select count(*) from an1 where to_number(id)<50000;

  COUNT(*)
----------
     20001

已用时间:  00: 00: 00.04

执行计划
----------------------------------------------------------
Plan hash value: 2832067379

-----------------------------------
| Id  | Operation          | Name |
-----------------------------------
|   0 | SELECT STATEMENT   |      |
|   1 |  SORT AGGREGATE    |      |
|*  2 |   TABLE ACCESS FULL| AN1  |
-----------------------------------

索引无效

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

3、

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/13177610/viewspace-676349/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-08-26

  • 博文量
    215
  • 访问量
    660364