【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. 再查询
[思考]索引的代价:
插入,更新