背景:
按照《Oracle Conecpt》的结构一起了解Oracle数据库,这是学习Oracle从入门到精通的基础。
前言《Introduction to Oracle Database》的历史文章:
第二章《Tables and Table Clusters》 历史文章:
《《Oracle Concept》第二章 - 21 (12c内容补充)》
《《Oracle Concept》第二章 - 20 (12c内容补充)》
第三章《Indexes and Index-Organized Tables》历史文章:
唯一和非唯一索引
索引能是唯一的或者非唯一的。唯一索引会确保键值列中不会存在相同的两个值。例如,不会有两个雇员具有相同的雇员ID。因此在唯一索引中,每个数据存在唯一的rowid。在叶子数据块中的数据仅会按照键值排序。
非唯一索引允许索引列中存在相同的值。例如employees表的first_name列可能包含多个叫Mike的值。对于非唯一索引,rowid会按照顺序包含在键值中,因此非唯一索引会按照索引键值和rowid(升序)进行排序。
Oracle的索引种不会包含所有键值列都为空的行,除了位图索引或者当聚簇键列值为空的情况。
索引类型
Oracle提供了几种索引方案,可以带来性能上的提升。可以将索引分为以下几类:
1. B树索引
这是标准的索引类型。对于主键和高选择度的索引非常适合。在连接列上创建B树索引,能根据索引列的排序快速检索数据。B树索引有以下几种子类型:
1.1 索引组织表
索引组织表是区别于堆表的,因为数据本身就是索引。参考“索引组织表概要”章节。
1.2 反键值索引
这种类型的索引,索引键的字节是反向排列的,例如103会按照301存储。字节反向排列可以让插入索引的请求分散到不同的数据块,减少争用。
1.3 降序索引
这种类型的索引会按照特定列降序排序的方式存储数据。参考“升序和教育索引”章节。
1.4 B树聚簇索引
这种类型的索引用来对表聚簇键设置索引。代替指向某行,键会指向含有和聚簇键相关行对应的数据块。参考“索引聚簇”这个章节。
2. 位图和位图连接索引
位图索引中,索引项会使用一个位指向不同的行。比较而言,B树索引项会指向单独的一行。位图连接索引是一种连接两张或更多张表的位图索引。参考“位图索引”这个章节。
3. 函数索引
这种类型的索引会对列使用函数转换,例如UPPER函数,或者表达式转换。B树和位图索引都可以使用函数索引。参考“函数索引”这个章节。
4. 应用领域索引
这种类型的索引是由用户在一个具体应用领域中创建的。物理索引不需要传统的索引结构,能在Oracle中以表或者外部文件的形式进行存储。参考“应用领域索引”。
另外,可以参考:
《Oracle Database Performance Tuning Guide》了解不同的索引。