ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 如何使用这个索引

如何使用这个索引

原创 Linux操作系统 作者:lfree 时间:2007-03-26 00:00:00 0 删除 编辑

今天看《oracle高效设计》中函数索引的内容,遇到一个简单的问题,如何使用
这个索引:

例子摘自《oracle高效设计》:

create table project
(project_ID number primary key,
teamid number,
job varchar2(100),
status varchar2(20) check (status in ('ACTIVE', 'INACTIVE'))
);


create UNIQUE index
job_unique_in_teamid on project
( case when status = 'ACTIVE' then teamid else null end,
case when status = 'ACTIVE' then job else null end
)
/


insert into project(project_id,teamid,job,status)
values( 1, 10, 'a', 'ACTIVE' );


insert into project(project_id,teamid,job,status)
values( 2, 10, 'a', 'ACTIVE' );
第 1 行出现错误:
ORA-00001: 违反唯一约束条件 (SCOTT.SCOTT.JOB_UNIQUE_IN_TEAMID)


我关心的是如何使用这个索引来查询数据,测试如下:
set autotrace traceonly
SELECT * FROM project
WHERE CASE "STATUS" WHEN 'ACTIVE' THEN "TEAMID" ELSE NULL END = 10
AND CASE "STATUS" WHEN 'ACTIVE' THEN "JOB" ELSE NULL END = 'a'

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


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

请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    3453
  • 访问量
    7141293