文档详情

数据库Oracle第四章3.ppt

发布:2017-04-27约2.64千字共39页下载文档
文本预览下载声明
数据库应用技术 第四章 数据库对象 与数据库设计;4.4 索引;4.4.1 索引的作用与使用;为表中的每一个列都创建一个索引? 坏处 创建和维护索引要耗费时间,这种时间随着数据量的增加而增加。 索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,需要的空间就会更大。 当对表中的数据进行增加、删除和修改的时候,也要动态地维护索引,降低维护数据的速度。 ;4.4.2 建立和使用索引的原则;4.4.2 建立和使用索引的原则;使用索引 装载数据后再建立索引。 不应在一张表上建立太多的索引。 删除不经常使用的索引。 导入大量数据时,最好先删除索引,数据全部插入后,再重新创建索引。 在经常存取的多个字段上建立复合索引,顺序应参照字段使用的频率确定。 合理的索引要建立在对各种查询的分析和预测中,也取决于DBA的所设计的数据库结构。 ;4.4.3 创建与维护索引;4.4.3 创建与维护索引;4.4.4 索引的分类;B*树索引 扇出多,每步读入多,步骤少,适合数据库上的查找。 举例:“性别”、“地区”{“东北”,“西北”,“华北”,…} “地区”中有8个键值,若用B-Tree索引,可能一步查找到叶结点,但每个叶结点对应1/8的记录,要存表中1/8记录的指针。 B*树索引对OR操作没什么益处。;位图索引(Bitmap) 低基数,键值取值范围较少。 对每个值建立一个位图,长度与表中记录个数相同。适合OR操作,修改代价大,应用在修改较少的字段上。;举例 字段sid NUMBER(6),取值类似000001~000099,前四位较少用,此时若从后往前(右左)看,则更快。 正常键: 反向键:针对 B*树上自然词序上下,左右。翻转键,适合使用较少值的情况。另外,对多个用户,通常将顺序打乱,插找树。 当用ORDER BY子句时,需进行后排序。;4.5 唯一性编号;目的:自动产生唯一编号。 举例 发票 invoices(Invoices_no NUMBER(10)) 新来一张发票,为其定义下一个invoices_no SELECT MAX(invoices_no) + 1 AS v_no FROM invoices; INSERT INTO invoices(invoices_no, …) VALUES(v_no,…); 问题: 1、A、B用户同时添加新发票,将可能产生相同的invoices_no,并发处理问题。解决较复杂。 2、无法解决“不断号”。如A申请101中死机,期间B申请了102,101断号。 3、空表时:NVL(MAX(invoice_no), 0) + 1;目的:一般用来作为主键 共享对象,标号发生器不依服于任何一个表。与MSSQL中类似的“自增长字段”不同。 减少应用程序代码 性能提高;创建序列,使用时取值 CREATE SEQUENCE 序列名 [INCREMENT BY 步长] [START WITH 初值] [MAXVALUE 最大值 | NOMAXVALUE] [MINVALUE 最小值 | NOMINVALUE] [CYCLE | NOCYCLE] [CACHE 缓存值数目| NOCACHE] INCREMENT BY 步长:序列号间隔,可为正或负整数,不可为0。缺省升序,为1。 START WITH 初值:第一个序列号。缺省为0。 MAXVALUE 最大值:可生成的最大值。 NOMAXVALUE:升序最大值1027,降序最大值-1。 ;创建序列,使用时取值 CREATE SEQUENCE 序列名 [INCREMENT BY 步长] [START WITH 初值] [MAXVALUE 最大值 | NOMAXVALUE] [MINVALUE 最小值 | NOMINVALUE] [CYCLE | NOCYCLE] [CACHE 缓存值数目| NOCACHE] MINVALUE 最小值:序列的最小值。 NOMINVALUE:升序最小值1,降序最小值-1026。 NOCYCLE:累加到头后不循环,报错,手工恢复值。 CACHE 缓存值数目:预先分配个值到缓存中,加速。;修改序列 ALTER SEQUENCE 序列名 [INCREMENT BY 步长] [MAXVALUE 最大值 | NOMAXVALUE ] [MINVALUE 最小值 | NOMINVALUE]; 修改未来序列值的增量。 设置或撤消最小值或最大值。 改变缓冲序列的数目。 可以ALTER除初始值以外的所有参数,如果想要改变初始值,必须DROP后重新CREATE。;删除序列 DROP SEQUENCE 序列名;
显示全部
相似文档