新手小白——Oracle数据库.索引与数据完整性
传送门:
新手小白——Oracle新建表完成题目
新手小白——Windows系统下Oracle数据库的DBCA界面创建与Navicat创建表空间、新建用户、授权详细教程
新手小白Oracle数据库入门——基本概念
Windows环境下OracleDatabase 11g R2 安装教程(零基础小白手把手超详细)
一、索引
1.什么是索引
如果一个数据表中存有海量的信息,当对表执行指定条件的查询时。常规的查询方法会将所有的记录都读取出来,然后再把读取的每一条记录与查询条件进行比对,最后返回满足条件的记录。这样进行操作的时间和开销都十分的巨大,对于这种情况,就可以考虑通过建立索引来减小系统开销。
2.索引的分类
按照索引数据的存储方式可以将索引分为B树索引、位图索引、反向键索引和基于函数的索引;按照索引列的唯一性又可以分为单列索引和复合索引。
建立索引的注意事项
1.索引应该建立在WHRER句频繁引用表上,如果在大表上频繁使用某列或某几个列作为条件执行索引操作,并且检索行低于总行数15%,那么应该考虑在这些列上建立索引。
2.限制表中索引的个数,索引主要用于加快查询速度,但会降低DML操作的速度。索引越多,DML操作速度越慢,尤其会极大地影响INSERT和DELETE操作的速度。因此,规划索引时,必须仔细权衡查询和DML的需求。
3.指定索引块空间的使用参数。基于表建立索引时,Oracle会将相应表列数据添加到索引块。为索引添加数据时,Oracle会按照PCTFREE参数在索引块上预留部分空间,该预留空间为将来的INSERT操作准备的。如果将来在表上执行大量INSERT操作,那么应该在建立索引时设置较大的PCTFREE。
4.将表和索引部署到相同的表空间,可以简化表空间的管理;将表和索引部署到不同的表空间,可以提高访问性能。
5.当在大表上建立索引时,使用NOLOGGING选项可以最小化重新做记录。使用NOLOGGING选项可以节省重做日志空间,降低索引建立时间、提高索引建立时间、提高索引并行建立的性能。不要在小表上建立索引
6.为了提高多表连接的性能,应该在连接列上建立索引
3.创建索引
建立B树索引
建立B树索引的语法
CREATE INDEX 索引名 ON 表名(列名[ASC|DESC],...);
创建位图索引
创建位图索引的语法
CREATE BITMAP INDEX 索引名 ON 表名 (列名[ASC|DESC],...);
4.维护索引
在SQL Developer中维护索引
右击表emp选择“编辑”菜单项,在表编辑窗口左边选择“索引”选项,在右边“所有”框中选中要维护的索引,在“‘索引属性”栏中修改索引的信息,单击“确认”按钮后完成修改。
重命名索引
alter index 旧索引名 rename to 新索引名;
删除索引
DROP INDEX [schema.] index_name
二、数据的完整性和约束性
非空约束
非空约束就是限制必须为某个列提供值。空值(NULL)是不存在值,它既不是数字0,也不是空字符串,而是不存在、未知的情况。
唯一性约束
唯一性约束表示的是数据不允许出现重复的情况。
主键约束
主键约束=非空约束+唯一性约束
外键约束
外键约束指的就是子表的某一个字段的内容取值必须由主表指定,通过外键将两张数据表联系起来。通过FOREIGN KEY(FK)来指定外键约束
删除外键表中的数据
级联删除:级联删除指的是建立外键约束时通过ON DELETE CASCADE子句设置,这样在删除父表数据时,由父表数据关联的所有子表数据都会被删除。
级联设置:通过ON DELETE SET NULL 选项将子表数据级联设置为null,当父表数据删除时,子表的数据可以不用删除,并且将父表关联字段的内容设置为null
禁用约束
约束创建之后,如果没有经过特殊处理,就一直起作用。但也可以根据实际需要,临时禁用某个约束。当某个约束被禁用后,该约束就不再起作用了,但它还存在于数据库中。
那么为什么要禁用约束呢这是因为约束的存在会降低插入和更改数据的效率,系统必须确认这些数据是否满足定义的约束条件。当执行一些特殊操作时,比如,使用SQL*Loader从外部数据源向表中导入大量数据,并且事先知道这些数据是满足约束条件的,为提高运行效率,就可以禁用这些约束。
ALTER TABLE 表名 DISABLE CONSTRAINT 约束;
激活约束
ATER TABLE 表名 ENABLE [NOVALIDATE|VALIDATE] CONSTRAINT 约束名
删除约束
ALTER TABLE 表名 DROP CONSTRAINT 约束名