技术开发 频道

Oracle中的索引详解

  【IT168 技术文档】

  一、 ROWID的概念

  存储了row在数据文件中的具体位置:64位编码的数据,A-Z, a-z, 0-9, +, 和 /,

  row在数据块中的存储方式

  SELECT ROWID, last_name FROM hr.employees WHERE department_id = 20;

  比如:OOOOOOFFFBBBBBBRRR

  OOOOOO:data object number, 对应dba_objects.data_object_id

  FFF:file#, 对应v$datafile.file#

  BBBBBB:block#

  RRR:row#

  Dbms_rowid包

  SELECT dbms_rowid.rowid_block_number('AAAGFqAABAAAIWEAAA') from dual;

  具体到特定的物理文件

  二、 索引的概念

  1、 类似书的目录结构

  2、 Oracle 的“索引”对象,与表关联的可选对象,提高SQL查询语句的速度

  3、 索引直接指向包含所查询值的行的位置,减少磁盘I/O

  4、 与所索引的表是相互独立的物理结构

  5、 Oracle 自动使用并维护索引,插入、删除、更新表后,自动更新索引

  6、 语法:CREATE INDEX index ON table (column[, column]...);

  7、 B-tree结构(非bitmap):

  [一]了解索引的工作原理:

  表:emp

  目标:查询Frank的工资salary

  建立索引:create index emp_name_idx on emp(name);
 

 


 [试验]测试索引的作用:

  1. 运行/rdbms/admin/utlxplan 脚本

  2. 建立测试表

  create table t as select * from dba_objects;

  insert into t select * from t;

  create table indextable

  as select rownum id,owner,object_name,subobject_name,

  object_id,data_object_id,object_type,created

  from t;

  3. set autotrace trace explain

  4. set timing on

  5. 分析表,可以得到cost

  6. 查询 object_name=’DBA_INDEXES’

  7. 在object_name列上建立索引

  8. 再查询

  [思考]索引的代价:

  插入,更新

0
相关文章