索引
概念
结构图
查询示意图
Leaf(叶子块)存储key column value(索引具体的值)以及能定位到数据块所在位置的rowid(索引块和数据块)。
索引的结构
扩展:rowid和rownum
特点
1、索引树的高度一般都比较低
2、索引由索引列存储的值及rowid组成
3、索引本身是有序的
实验
删除表
drop table t1 purge;
drop table t2 purge;
drop table t3 purge;
drop table t4 purge;
drop table t5 purge;
drop table t6 purge;
drop table t7 purge;
创建表
create table t1 as select rownum as id, rownum+1 as id2 from dual connect by level<=5;
create table t2 as select rownum as id, rownum+1 as id2 from dual connect by level<=50;
create table t3 as select rownum as id, rownum+1 as id2 from dual connect by level<=500;
create table t4 as select rownum as id, rownum+1 as id2 from dual connect by level<=5000;
create table t5 as select rownum as id, rownum+1 as id2 from dual connect by level<=50000;
create table t6 as select rownum as id, rownum+1 as id2 from dual connect by level<=500000;
create table t7 as select rownum as id, rownum+1 as id2 from dual connect by level<=5000000;
创建索引
create index idx_id_t1 on t1(id);
create index idx_id_t2 on t2(id);
create index idx_id_t3 on t3(id);
create index idx_id_t4 on t4(id);
create index idx_id_t5 on t5(id);
create index idx_id_t6 on t6(id);
create index idx_id_t7 on t7(id);
查看索引段
select segment_name, bytes/1024 from user_segments
where segment_name in ('IDX_ID_T1','IDX_ID_T2','IDX_ID_T3','IDX_ID_T4','IDX_ID_T5','IDX_ID_T6','IDX_ID_T7');
问:
为什么’IDX_ID_T1’,‘IDX_ID_T2’,'IDX_ID_T3’三个索引一样大
答:
块:最小的单位
区:最小的空间分配单位
一个区8个块,一个块8KB,段的最小空间 ——— 64KB
查看索引统计信息
问:
为什么7张表记录数依次都是10倍的差别,BLEVEL是一样高?
答:
BLEVEL=1表示索引树为2层,但500、5000、50000都不能让叶子块的数据量多到把第二层的第一个管理块填满,所以产生不能第三层,所以都是2层高,其他类似。
索引扫描![在这里插入图片描述](https://img-blog.csdnimg.cn/838942b0f83c45eca9fac7e06a6569f3.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5Zad6YaJ6YWS55qE5bCP55m9,size_20,color_FFFFFF,t_70,g_se,x_16)
执行计划 & 统计信息
第二次select
问
返回时间一致
COST一致
逻辑读一致
答
BLEVEL都为2,高度为3,产生的IO次数一致。
全表扫描
可以看到COST和逻辑读次数是原来的好多好多倍