数据库Oracle第四章3.ppt
文本预览下载声明
数据库应用技术第四章 数据库对象与数据库设计;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 序列名;
显示全部