一、索引
1、索引的作用
- 快速存取数据
- 既可以改善数据库性能,又可以保证列值的唯一性
- 实现表与表之间的参照完整性
- 在使用ORDER BY,GROUP BY子句进行数据检索时,利用索引可以减少排序和分组的时间
2、索引的分类
- 索引按照存储方法分类,可以分为两类:
(1)B树索引的存储结构类似图书的索引结构:有分支和叶两种类型的存储数据块,分支相当于图书的大目录,叶子相当于索引到的具体书页。Oracle用B树(B*-tree)机制存储索引条目,以保证用最短路径访问键值。默认情况下大多使用B*数索引,该索引就是通常所说的唯一索引、逆序索引等。
(2)位图索引主要用来节省空间,减少Oracle对数据块的访问。它采用位图偏移方式来与表的行ID号对应。采用位图索引一般是在重复值太多的表字段情况下。 - 索引按照功能和索引对象可分为以下六种类型:
(1)唯一索引:唯一索引意味着对象不会有两行记录相同的索引键值。
(2)非唯一索引:不对索引列的值进行唯一性限制的列的称为非唯一索引。
(3)分区索引:所谓分区索引是指索引可以分散地存在于多个不同的表空间中,其优点是可以提高数据查询的效率。
(4)未排序索引:未排序索引也称为正向索引。
(5)逆序索引:逆序索引也称为反向索引。该索引同样保持索引列按顺序排列,但是颠倒已索引的每列的字节。
(6)基于函数的索引:基于函数的索引是指索引中的一列或者多列是一个函数或者表达式,索引根据函数或者表达式计算索引列的值。
3、索引的使用原则
1、在表中插入数据后创建索引。如果在装载数据之前建立索引,那么插入每行时,Oracle都必须更改索引。
2、索引正确的表和列 。如果经常索引的内容仅为包含大量数据的表中少于15%的行,那就建立索引。为了改善多个表的相互关系,常常使用索引列来进行关系连接。
3、合理安排索引列。常用的列放在前面,因为列的排序影响查询性能。
4、限制表中索引的数量。索引数量越多,修改表中数据对索引做出更改的工作量越大。
5、指定索引数据块空间。
6、根据索引大小设置存储参数。
二、数据完整性
1、分类
- 域完整性:又称为列完整性,指定一个数据集对某一个列是否有效和确定是否允许空值。通常经过使用有效性来实现,还可以通过限制数据类型、格式或者可能的取值范围来实现。
- 实体完整性:又称为行完整性,要求表中的每一行都有一个唯一的标志符。
- 参照完整性:主键是指在表中年唯一标志表的每个数据行的一个或者多个表列。外键是指如果一个表中的一个或者若干个字段的组合是另一个表的主键,则该字段或者字段组合为该表的外键。
(1)从表不能引用不存在的键值。
(2)若主表的键值改变,那么整个数据库中对从表键值所有的引用都要进行一致的更改。
(3)若主表中没有关联的记录,就不能将记录添加到从表。
(4)若删除主表某一记录,应该先删除从表中与该记录匹配的相关记录。
约束类型 | 描述 |
---|---|
NOT NULL | 不允许空值 |
UNIQUE | 唯一,防止出现冗余值 |
PRIMARY KEY | 主关键字 |
FOREIGN KEY | 外关键字 |
CHECK | 检查满足条件 |