Oracle12C--索引(十八)
来源:互联网 发布:剑灵数据异常 编辑:程序博客网 时间:2024/05/22 17:37
知识点的梳理:
- 可以使用自动跟踪功能,来判断当前查询语句是否使用的全表扫描。如果使用索引来查询,也可以通过这种方式来分辨当前是索引查询,还是全表扫描;
- 索引是提升数据库查询性能的一种手段,但是频繁更新数据表时,索引反而会造成性能的降低;
这是啥?
B树索引
该索引是Oracle默认建立的索引;
该索引在检索“高基数数列”(该列上的重复内容较少或没有)的时候可以提高性能;
示例:如果当前表中存在10W行数据,而2W行记录之后已经不存在符合查询要求的数据,如果此时继续向下采用逐行扫描的方式明显是浪费资源,这个时候就可以采用树形排序方式;
假设该表中的工资数据为:1300,2850,1100,1600,2450,2975,5000,3000,1250,950,800,则按以下原则进行树结构的绘制:
取第一个数据作为根节点;
比根节点小的数据放在左子树,比根节点大的数据放在右子树;
在进行数据排序的时候,除了使用sal字段的内容之外,每一个操作节点中还保存了一个ROWID的信息,而利用此ROWID的信息就可以找到对应的完整记录;
B树索引结构分析
叶子节点(Leaf Node):包含直接指向表中的数据行(即:索引项);该节点保存的就是索引项,而索引项由3个部分组成:
索引项头:存储了行数和所得信息;
索引列长度和值:两者需要同时出现,定义了列的长度,在长度之后保存的就是列的内容;
ROWID:指向表中数据行的ROWID,通过此ROWID找到完整记录;
分支节点(Branch Node):包含指向索引里其他的分支节点或叶子节点;
根节点(Root Node):一个B树索引只有一个根节点,是位于最顶端的分支节点;
创建B*Tree索引方法:
方法1:当某一个列上设置了主键约束或唯一约束,则会自动创建约束;
方法2:利用命令直接创建索引;
语法:
create index [用户名.]索引名 on[用户名.]表名称 (列名称 [ASC|DESC],....);
create index emp_sal_ind on emp(sal);--在emp表的sal字段上创建了一个索引,这会自动地在内存中将相关的数据形成一颗索引树,以提升查询性能;
通过user_indexes数据字典,查看哪张表存在索引:
SELECT index_name , index_type , table_owner , table_name , uniqueness , status FROM user_indexes ;
SELECT * FROM user_ind_columns WHERE index_name='EMP_SAL_IND' ;
如何利用B树索引提升查询性能?
最方便的方法是准备两张表,A表进行数据的更新,B表在每天数据库空闲时间,将A表更新后的数据保存在B表,同时B表上设置索引,用户检索利用B表,更新使用A表,就可以提升性能;
但是这样做会牺牲速度;
位图索引
当某一个列的数据都属于低基数列的时候,就可以利用位图索引来提升性能;
例如,表示雇员的数据表上会存在部门编号的数据列,而在部门编号列上只有3种取值,分别是10,20,30,此时就可以使用位图索引;如果雇员的数据表包含30万条数据,那么按照位图索引,可以将这些数据,按照部门编号分成3组进行查询,在效率上是一定快过直接进行全表扫描的;
语法:create bitmap index [用户名.]索引名称 on[用户名.]表名称 (列名称 [asc|desc],...);
示例:CREATE BITMAP INDEX emp_deptno_ind ON emp(deptno) ;
通过“user_indexes”数据字典查看索引
SELECT index_name , index_type , table_owner , table_name , uniqueness , status FROM user_indexes ;
删除索引
示例:DROPINDEX emp_sal_ind ;
- Oracle12C--索引(十八)
- Oracle12C--程序结构(二十八)
- Oracle12C--索引表(三十二)
- mongodb指南(十八) - developer zone - 索引(二)_id索引、复合索引、稀疏索引、数组索引、唯一索引
- Oracle12C体系结构(二)
- Oracle12C--SQLPlus(四)
- Oracle12C--锁(十二)
- Oracle12C--序列(十六)
- Oracle12C基本常识(五)
- Oracle12C--视图(十九)
- Oracle12C--函数(十三)
- Oracle12C--触发器(五十二)
- Oracle12C--Oracle事务处理(十一)
- Oracle12C--伪列(十七)
- Oracle12C--行列转换(十五)
- Oracle12c--自治事务(四十四)
- SQL Server-索引故事的遥远由来,原来是这样的?(二十八)
- SQL Server-索引故事的遥远由来,原来是这样的?(二十八)
- Mybatis对实体 "characterEncoding" 的引用必须以 ';' 分隔符结尾
- Linux创建备份数据库的任务
- 深入理解Python中协程的应用机制: 使用纯Python来实现一个操作系统吧!!
- 数的划分
- AndroidStudio中依赖同一个jar解决方法
- Oracle12C--索引(十八)
- 细数云计算产品和技术-Google App Engine
- SPX1117--800mA低压差(LDO)稳压器
- 蓝桥杯Java练习——正六面体染色
- CHM手册文件打开内容不显示
- Selenium2+Python自动化测试实战(虫师)学习笔记(一)-配置报错篇
- 对象之间是有联系的
- 习题1
- 论文解读(持续更新+自己解读+优秀解读传送门)