oracle用WHERE替代ORDER BY

ORDER BY 子句只在两种严格的条件下使用索引.

ORDER BY中所有的列必须包含在相同的索引中并保持在索引中的排列顺序.

ORDER BY中所有的列必须定义为非空.

WHERE子句使用的索引和ORDER BY子句中所使用的索引不能并列.

例如:

      表DEPT包含以下列:

        DEPT_CODE    PK    NOT NULL

        DEPT_DESC           NOT NULL

        DEPT_TYPE           NULL

   

       非唯一性的索引(DEPT_TYPE)

     低效: (索引不被使用)

            SELECT DEPT_CODE

            FROM DEPT

            ORDER BY DEPT_TYPE

       EXPLAIN PLAN:

            SORT ORDER BY

                  TABLE ACCESS FULL

     高效: (使用索引)

           SELECT DEPT_CODE

           FROM DEPT

        WHERE DEPT_TYPE > 0

    EXPLAIN PLAN:

      TABLE ACCESS BY ROWID ON EMP

             INDEX RANGE SCAN ON DEPT_IDX

 

      ORDER BY 也能使用索引! 这的确是个容易被忽视的知识点. 我们来验证一下:

SQL>  select * from emp order by empno;

Execution Plan

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

   0      SELECT STATEMENT Optimizer=CHOOSE

   1    0   TABLE ACCESS (BY INDEX ROWID) OF 'EMP'

   2    1     INDEX (FULL SCAN) OF 'EMPNO' (UNIQUE)

转载于:https://www.cnblogs.com/fanweisheng/p/11125524.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.1 选用适合的ORACLE优化器 4 1.2 基础表的选择 4 1.3 访问TABLE的方式 5 1.4 共享SQL语句 5 1.5 执行路径. 5 1.6 选择最有效率的表名顺序(只在基于规则的优化器中有效) 6 1.7 WHERE子句中的连接顺序 6 1.8 SELECT子句中避免使用 ‘ *‘ 7 1.9 减少访问数据库的次数 7 1.10 使用DECODE函数来减少处理时间 8 1.11 删除重复记录 8 1.12 用TRUNCATE替代DELETE 9 1.13 尽量多使用COMMIT 9 1.14 计算记录条数 9 1.15 用WHERE子句替换HAVING子句 9 1.16 减少对表的查询 10 1.17 通过内部函数提高SQL效率 10 1.18 使用表的别名(ALIAS) 11 1.19 用EXISTS替代IN 12 1.20 用NOT EXISTS替代NOT IN 12 1.21 用表连接替换EXISTS 13 1.22 用EXISTS替换DISTINCT 13 1.23 识别’低效执行’的SQL语句 14 1.24 用索引提高效率 14 1.25 索引的操作 15 1.26 多个平等的索引 16 1.27 等式比较和范围比较 17 1.28 不明确的索引等级 17 1.29 强制索引失效 18 1.30 避免在索引列上使用计算 19 1.31 自动选择索引 20 1.32 避免在索引列上使用NOT 20 1.33 用>=替代> 21 1.34 用UNION替换OR (适用于索引列) 21 1.35 用IN来替换OR 22 1.36 避免在索引列上使用IS NULL和IS NOT NULL 22 1.37 总是使用索引的第一个列 23 1.38 ORACLE内部操作 23 1.39 用UNION-ALL 替换UNION ( 如果有可能的话) 24 1.40 使用提示(HINTS) 25 1.41 用WHERE替代ORDER BY 25 1.42 避免改变索引列的类型. 26 1.43 需要当心的WHERE子句 27 1.44 连接多个扫描 28 1.45 CBO下使用更具选择性的索引 29 1.46 避免使用耗费资源的操作 29 1.47 日期使用 29 1.48 使用显式的游标(CURSORS) 30 1.49 优化EXPORT和IMPORT 30 1.50 分离表和索引 30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值