Index
使用索引可以大大提高数据库的性能。
Primary and unique keys automatically have indexes.
复合索引的列顺序问题。组合列中在前面的列在where子句中查询才会走索引。
B-Tree Indexes 典型的B-Tree索引。
Full Index Scan:可以消除排序,因为index本身已经排序。
Suppose that an application runs the following query:
SELECT department_id, last_name, salary
FROM employees
WHERE salary > 5000
ORDER BY department_id, last_name;
Also assume that department_id, last_name, and salary are a composite key in an index. Oracle Database performs a full scan of the index, reading it in sorted order (ordered by department ID and last name) and filtering on the salary attribute. In this way, the database scans a set of data smaller than the employees table, which contains more columns than are included in the query, and avoids sorting the data.
Fast Full Index Scan:只扫描Index table,因为Index table已经包含了所有要返回的数据。
A fast full index scan is a full index scan in which the database reads the index blocks in no particular order. The database accesses the data in the index itself, without accessing the table.
Index Range Scan
Index Unique Scan
Index Skip Scan:customers table的cust_gender列不是M就是F,该表有一个复合索引(cust_gender, cust_email).
那么以下这个查询
SELECT * FROM sh.customers WHERE cust_email = 'Abbey@company.com';
数据库自己优化为:
SELECT * FROM sh.customers WHERE cust_gender = 'F'
AND cust_email = 'Abbey@company.com'
UNION ALL
SELECT * FROM sh.customers WHERE cust_gender = 'M'
AND cust_email = 'Abbey@company.com';
Reverse Key Indexes:反转Index key的存储。对于没有反转的index,连续值的index会插入在同一或者相近的block里,造成竞争。而反转的index,连续的index被分散存储。但是同时,Reverse Key Indexes丢失了range scan的能力。
Index Clustering Factor:衡量索引的聚集性,该值越低,则一个范围内的索引更倾向于指向同一个数据块(data block)。
索引的顺序:索引可以定义存储时的顺序,升序或者降序。
Key Compression:索引的Key的存储可以重新排列以节省空间。原有的key可以被分解为prefix entry和suffix entry。
如
online,0,AAAPvCAAFAAAAFaAAa
online,0,AAAPvCAAFAAAAFaAAg
online,2,AAAPvCAAFAAAAFaAAm
可以排成
online,0
AAAPvCAAFAAAAFaAAa
AAAPvCAAFAAAAFaAAg
online,2
AAAPvCAAFAAAAFaAAm
Bitmap Indexes:对于查询多且取值范围小的列适用。
Bitmap Join Indexes。
Bitmap Storage Structure:一样用B-Tree.
其他书上看到位图索引对于一个值是单行存储的。有可能导致性能问题。
因此改动一个值,会锁行,导致该行所有其他值无法修改。
Function-Based Indexes:基于函数的索引。
Application Domain Indexes:基于应用域的索引,用户可以高度定制。
Index Storage:索引可以任意存储,索引和其索引的表不在同一个tablespace中给表备份带来了方便。
Heap-Organized Table
rows are inserted where they fit。
Index-Organized Tables
叶子节点直接存储row。以PK作为索引。
两种表的对比
Heap-Organized Table
The rowid uniquely identifies a row. Primary key constraint may optionally be defined.
Physical rowid in ROWID pseudocolumn allows building secondary indexes.
Individual rows may be accessed directly by rowid.
Sequential full table scan returns all rows in some order.
Can be stored in a table cluster with other tables.
Can contain a column of the LONG data type and columns of LOB data types.
Can contain virtual columns (only relational heap tables are supported).
Index-Organized Table
Primary key uniquely identifies a row. Primary key constraint must be defined.
Logical rowid in ROWID pseudocolumn allows building secondary indexes.
Access to individual rows may be achieved indirectly by primary key.
A full index scan or fast full index scan returns all rows in some order.
Cannot be stored in a table cluster.
Can contain LOB columns but not LONG columns.
Cannot contain virtual columns.
Index-Organized Tables with Row Overflow Area
Index-Organized Tables中,为了解决行过大问题,可以把一行分为2部分存储。The index entry储存PK和一些可选列,放在index segment里面,The overflow part包含其他的列,放在storage area segment里面。
Secondary Indexes on Index-Organized Tables
logical rowids以PK为基础,所以2级索引可以直接构建在logical rowid之上。
Bitmap Indexes on Index-Organized Tables
分享到:
相关推荐
学习和掌握Oracle ODT,开发者需要了解Oracle数据库的基本概念,如SQL语言、PL/SQL编程,以及Visual Studio的基础知识。此外,对于想要深入使用ODT的开发者,还需要熟悉Oracle的其他相关技术,比如Oracle Data ...
6. **索引和优化**:了解如何创建和管理索引,以及如何优化SQL查询以提高数据库性能。 7. **数据库连接和事务管理**:理解如何在PL/SQL中建立和管理数据库连接,以及如何使用COMMIT、ROLLBACK进行事务处理。 8. **...
9. **索引和性能优化**:Oracle API 提供了创建、管理和使用索引的接口,开发者可以利用这些接口优化查询性能。 10. **事务控制**:在Oracle API中,可以使用诸如`COMMIT`、`ROLLBACK`等命令来控制事务,确保数据的...
“Oracle PL-SQL语言初级教程.pdf”很可能是这个压缩包的核心内容,它会逐步引导学习者了解上述知识点,并通过实例讲解如何应用这些概念。配合“www.pudn.com.txt”中的可能资源链接,学习者可以得到更全面的学习...
`pl_sql`标签表明,这份资料可能包含了关于PL/SQL的基础和高级概念,比如块结构(DECLARE, BEGIN, END)、异常处理(TRY-CATCH)、游标处理、动态SQL以及如何调用Oracle数据库的内置函数和包。 `oracle_总结`标签...
5. **Enhanced Index Compression (EIC)**:增强型索引压缩提高了索引存储效率,尤其是对于大量重复值的情况,可以显著节省空间并提高查询性能。 6. **Database In-Memory Option**:虽然这个特性在12c中被更广泛地...
本笔记主要探讨了两个关键概念:约束和索引,这些都是Oracle数据库中的基础但至关重要的元素。 **1. 约束(Constraints)** 约束是Oracle数据库中用于确保数据完整性的规则。它们分为以下几种类型: - **非空约束...
JSP的核心概念包括页面指令、脚本元素、动作标签等,其中页面指令如`<%@ page>`用于配置页面属性,脚本元素可以包含Java代码片段,而动作标签如`<jsp:include>`则用于控制页面的动态行为。 【Oracle】 Oracle是一款...
1. **Oracle 9i概述**:Oracle 9i全称为Oracle Database 9.0.x,它是Oracle数据库产品线的一个里程碑,首次引入了互联网数据库的概念,强化了对XML的支持,并增强了数据仓库和在线事务处理(OLTP)的性能。...
以上只是Oracle数据库入门的一些核心概念和操作,实际学习过程中还需要深入实践,通过创建表、执行SQL、管理用户权限、进行备份恢复等操作,以加深理解并提高技能。这本学习笔记将引导初学者逐步走进Oracle的世界,...
- 数据库概念:了解关系型数据库的基本原理,如表、字段、记录和索引。 - SQL语法:学习SELECT、INSERT、UPDATE、DELETE等基本语句,用于查询、插入、更新和删除数据。 2. **查询语句(SELECT)**: - 单表查询...
下面,我们将深入探讨一些Oracle SQL的基础概念和重要知识点。 1. **Oracle数据库结构**:Oracle数据库由多个组件组成,包括表空间、数据文件、控制文件、重做日志文件等。表空间是存储数据的主要单位,数据文件则...
根据给定的文件信息,以下是关于Oracle 11g R2数据库概念的知识点: 1. Oracle数据库简介 - 关系数据库管理系统的定义:是数据库管理系统(DBMS)的一种,其基础为关系模型,该模型将数据表示为一系列相关表的集合...
1. **Oracle基础知识**:包括Oracle数据库架构、表空间与数据文件、控制文件、重做日志、实例与服务等基本概念。 2. **安装与配置**:介绍如何在各种操作系统上安装Oracle数据库软件,以及配置数据库实例和网络环境...
Oracle提供了多种类型的索引,如B树索引、位图索引、函数索引等,以提高查询性能。通过合理使用索引和分析SQL语句,可以有效地优化数据库性能。 九、联接查询 在Oracle SQL中,可以使用`JOIN`关键字进行多表查询,...
Oracle 索引与分区索引是 Oracle 数据库中两个重要的概念,它们都是为了提高查询性能和数据存储效率而设计的。在本文中,我们将详细介绍 Oracle 索引与分区索引的概念、特点、分类、创建方法、维护操作等方面的知识...
"数据库创建索引SQL Oracle" 数据库索引是数据库性能优化的重要手段之一。创建索引可以提高查询速度,降低数据库的负载,提高数据的安全性。本文将详细介绍数据库创建索引的原则、分类、创建方法、管理和优化等方面...
这个"Oracle_11gR2_概念_合集.zip"压缩包显然包含了关于Oracle 11gR2数据库核心概念的详细资料,主要针对对Java开发者和数据库管理员(DBAs)有极高价值的信息。 首先,让我们深入理解Oracle 11gR2的关键概念: 1....
5. **事务处理**:Oracle支持事务的概念,允许一系列数据库操作作为一个单元执行,确保数据的一致性。COMMIT和ROLLBACK语句用于提交或回滚事务。 6. **视图与索引**:视图是虚拟表,基于一个或多个表的查询结果,...
描述中提到的"数据字典"是一个重要的概念,它是数据库管理系统中的一个重要组成部分,记录了数据库中所有对象的详细信息,如表结构、字段、索引等。这个特定的"数据字典"能帮助用户在MySQL、Oracle和SQL Server之间...