oracle 创建主键反向索引

php中文网
发布: 2016-06-07 15:50:49
原创
1763人浏览过

前言: 今天在学习oracle索引,看到创建“反向索引”就在想那如何在主键上创建反向索引嘞? 思路:1、 是不是在添加主键时使用reverse关键字: SQL alter table emp2 add constraint pk_emp2 primary key (empno) reverse;alter table emp2 add constraint p

前言:今天在学习oracle索引,看到创建“反向索引”就在想那如何在主键上创建反向索引嘞?

思路:1、是不是在添加主键时使用reverse关键字: 

SQL> alter table emp2 add constraint pk_emp2 primary key (empno)  reverse;
alter table emp2 add constraint pk_emp2 primary key (empno)  reverse
                                                             *
ERROR at line 1:
ORA-14125: REVERSE/NOREVERSE may not be specified in this context
登录后复制
从上面看出明显不是这样创建的。

2、看了看文档也没有这样用的方法,但是直接使用lter table emp2 add constraint pk_emp2 primary key (empno)肯定是不对的。

3、好像在创建主键时可以指定一个索引。是不是可以先创建反向索引,然后在创建主键是指定索引呢?那就试一试呗:

Getfloorplan
Getfloorplan

创建 2D、3D 平面图和 360° 虚拟游览,普通房间变成梦想之家

Getfloorplan 148
查看详情 Getfloorplan
SQL> create unique index re_emp2no_idx on emp2(empno) reverse;

Index created.

SQL> alter table emp2 add constraint pk_emp2 primary key (empno) USING INDEX re_emp2no_idx;

Table altered.

SQL> 
SQL> select * from emp2 where empno = 7369;

     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 17-DEC-80       1000                    20


Execution Plan
----------------------------------------------------------
Plan hash value: 478151573

---------------------------------------------------------------------------------------------
| Id  | Operation                   | Name          | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |               |     1 |    87 |     1   (0)| 00:00:01 |
|   1 |  TABLE ACCESS BY INDEX ROWID| EMP2          |     1 |    87 |     1   (0)| 00:00:01 |
|*  2 |   INDEX UNIQUE SCAN         | RE_EMP2NO_IDX |     1 |       |     0   (0)| 00:00:01 |
---------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("EMPNO"=7369)

SQL> select INDEX_NAME, INDEX_TYPE, TABLE_NAME from user_indexes;

INDEX_NAME                     INDEX_TYPE                  TABLE_NAME
------------------------------ --------------------------- ------------------------------
RE_EMP2NO_IDX                  NORMAL/REV                  EMP2
USER_INDEX_TBS                 FUNCTION-BASED NORMAL       EMP
PK_EMP                         NORMAL                      EMP
PK_DEPT                        NORMAL                      DEPT   
   
SQL> SELECT TABLE_NAME, CONSTRAINT_NAME, CONSTRAINT_TYPE 
FROM all_constraints WHERE TABLE_NAME = 'EMP2';

TABLE_NAME                     CONSTRAINT_NAME                C
------------------------------ ------------------------------ -
EMP2                           PK_EMP2                        P
登录后复制
从上面看出思路对了,也成功创建主键反向索引。

注意:在创建索引的时候一定要创建唯一索引(unique index),否则在使用索引查询时用的是 index range scan

相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号