Oracle 索引概述

Oracle 提供了多种不同类型的索引以供使用。简单地说,Oracle 中包括如下索引:
B*树索引:这些是我所说的“传统“索引。到目前为止,这是 Oracle 和大多数其他数据库中最常用
的索引。B*树的构造类似于二叉树,能根据键提供一行或一个行集的快速访问,通常只需很少的读操作就
能找到正确的行。不过,需要注意重要的一点,”B*树“中的”B“不代表二叉(binary),而 代 表 平 衡( balanced)。
B*树索引并不是一颗二叉树,这一点在介绍如何在磁盘上物理地存储 B*树时就会了解到。B*树索引有以下
子类型:
索引组织表(index organized table):索引组织表以 B*树结构存储。堆表的数据行是以一种无组
织的方式存储的(只要有可用的空间,就可以放数据),而 IOT 与之不同,IOT 中的数据要按主键的顺序存
储和排序。对应用来说,IOT 表现得与“常规“表并无二致;需要使用 SQL 来正确地访问 IOT。IOT 对信息
获取、空间系统和 OLAP 应用最为有用。IOT 在上一章已经详细地讨论过。
B*树聚簇索引(B*tree cluster index)这些是传统 B*树索引的一个变体(只是稍有变化)。B*树聚
簇索引用于对聚簇键建立索引(见第 11.章中“索引聚簇表“一节),所以这一章不再讨论。在传统 B*树中 ,
键都指向一行;而 B*树聚簇不同,一个聚簇键会指向一个块,其中包含与这个聚簇键相关的多行。
降序索引(descending index):降序索引允许数据在索引结构中按“从大到小“的顺序(降序)排
序,而不是按”从小到大“的顺序(升序)排序。我们会解释为什么降序索引很重要,并说明降序索引如
何工作。
反向键索引(reverse key index):这也是 B*树索引,只不过键中的字节会“反转“。利用反向键
索引,如果索引中填充的是递增的值,索引条目在索引中可以得到更均匀的分布。例如,如果使用一个序
列来生成主键,这个序列将生成诸如 987500、987501、987502 等值。这些值是顺序的,所以倘若使用一个
传统的 B*树索引,这些值就可能放在同一个右侧块上,这就加剧了对这一块的竞争。利用反向键,Oracle
则会逻辑地对 205789、105789、005789 等建立索引。Oracle 将数据放在索引中之前,将先把所存储数据
的字节反转,这样原来可能在索引中相邻放置的值在字节反转之后就会相距很远。通过反转字节,对索引
的插入就会分布到多个块上。
位图索引(bitmap index):在一颗 B*树中,通常索引条目和行之间存在一种一对一的关系:一个索
引条目就指向一行。而对于位图索引,一个索引条目则使用一个位图同时指向多行。位图索引适用于高度
重复而且通常只读的数据(高度重复是指相对于表中的总行数,数据只有很少的几个不同值)。考虑在一个
有 100 万行的表中,每个列只有 3 个可取值:Y、N 和 NULL。举例来说,如果你需要频繁地统计多少行有值
Y,这就很适合建立位图索引。不过并不是说如果这个表中某一列有 11.000 个不同的值就不能建立位图索
引,这一列当然也可以建立位图索引。在一个 OLTP 数据库中,由于存在并发性相关的问题,所以不能考虑
使用位图索引(后面我们就会讨论这一点)。注意,位图索引要求使用 Oracle 企业版或个人版。
位图联结索引(bitmap join index):这为索引结构(而不是表)中的数据提供了一种逆规范化的方
法。例如,请考虑简单的 EMP 和 DEPT 表。有人可能会问这样一个问题:“多少人在位于波士顿的部门工作?
“EMP 有一个指向 DEPT 的外键,要想统计 LOC 值为 Boston 的部门中的员工人数,通常必须完成表联结,
将 LOC 列联结至 EMP 记录来回答这个问题。通过使用位图联结索引,则可以在 EMP 表上对 LOC 列建立索引。
基于函数的索引(function-based index):这些就是 B*树索引或位图索引,它将一个函数计算得到
的结果存储在行的列中,而不是存储列数据本身。可以把基于函数的索引看作一个虚拟列(或派生列)上
的索引,换句话说,这个列并不物理存储在表中。基于函数的索引可以用于加快形如 SELECT * FROM T WHERE
FUNCTION(DATABASE_COLUMN) = SAME_VALUE 这样的查询,因为值 FUNCTION(DATABASE_COLUMN)已经提前计
算并存储在索引中。

应用域索引(application domain index):应用域索引是你自己构建和存储的索引,可能存储在
Oracle 中,也可能在 Oracle 之外。你要告诉优化器索引的选择性如何,以及执行的开销有多大,优化器
则会根据你提供的信息来决定是否使用你的索引。Oracle 文本索引就是应用域索引的一个例子;你也可以
使用构建 Oracle 文本索引所用的工具来建立自己的索引。需要指出,这里创建的“索引“不需要使用传统
的索引结构。例如,Oracle 文本索引就使用了一组表来实现其索引概念。

转载于:https://www.cnblogs.com/lbp0200/archive/2013/03/05/2944559.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/576079.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

zabbix的安装

zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix由2部分构成,zabbixserver与可选组件zabbix agent。 一、Zabbix简介 1.1Zabbix简介   Zabbix是一个企业级的开源分布式监控解决方案&…

LinuxMySQL主从配置

mysql 主从配置-2主从 mysql 启动以后,我们来做一些配置。假设 3306 为主,3307 为从登陆 mysql 命令和参数/usr/local/mysql/bin/mysql登陆不同的 mysql 参数,可以 IP 也可以是 sockmysql -S /tmp/mysql.sock sock 登陆主mysql -h127.0.0.1 -…

通过udp及vlc传递视频流

可以通过两个host进行测试,如果是使用笔记本的摄像头进行测试,首先需要将当前用户添加到video组: sudo usermod -G video $user 发送方: vlc v4l2:// :v4l2-dev/dev/video0 :v4l2-width640 :v4l2-height480 --sout "#transco…

Linux主从复制

mysql主从复制 (超简单) 怎么安装mysql数据库,这里不说了,只说它的主从复制,步骤如下: 1、主从服务器分别作以下操作: 1.1、版本一致 1.2、初始化表,并在后台启动mysql 1.3、修…

对fgets的理解1

摘自《linux程序设计 中文第四版》第94页。 转载于:https://www.cnblogs.com/pengdonglin137/archive/2013/03/10/2952421.html

Linux 中mysql常用命令

测试环境: mysql5.0.45【注:可以在mysql中通过mysql> SELECT VERSION();来查看数据库版本】一、连接MYSQL。格式: mysql -h主机地址 -u用户名 -p用户密码1、连接到本机上的MYSQL。首先打开DOS窗口,然后进入目录mysq…

java就业培训教程 第一章读书笔记

1.1 JVM和java的跨平台java的跨平台: java源程序经过编译->java字节码文件->由JVM执行其实对于java的跨平台的这个特性,刚开始不是很能理解,直到有一次,我把在ubuntu的java源文件弄到windows平台下,发觉好像不是…

mysql 查询某个字段SQL语句【mysql语句】

#查询某个字段为空的语句 SELECT * FROM passport WHERE passNickname IS NULL; 使用方法:SELECT * FROM 表名 WHERE 字段名 IS NULL; #查询某个字段不为空的语句 SELECT * FROM passport WHERE passNickname IS NOT NULL; 使用方法:SELECT * FROM…

NFS服务的搭建

服务器端1.安装依赖:1)NFS的安装是非常简单的,只需要两个软件包即可,而且在通常情况下,是作为系统的默认包安装的。nfs -utils-* :包括基本的NFS命令与监控程序 portmap-* :支持安全NFS RPC服务…

qml学习文档-转载

importQtQuick1.0 /* 3.基本元素的介绍 基本可视化项 Item基本的项元素在QML中所有可视化的向都继承他 Rectangle基本的可视化矩形元素 Gradient定义一个两种颜色的渐变过程 GradientStop定义个颜色,被Gradient使用 Image在场景中使用位图 BorderImage(特殊的项)定义…

vsftpd的虚拟账户配置

1). yum -y install vsftpd db4-utils 2). 建立系统账号 useradd virftp -s /sbin/nologin 3). 建立虚拟账户 vim /etc/vsftpd/vsftpd_login test 1234567 4). 更改权限 chmod 600 /etc/vsftpd/vsftpd_login 5). 生成库文件密码 db_load -T -t h…

图片截剪

public class ImageUtil{#region " 正方型裁剪 "/// <summary> /// 正方型裁剪 /// 以图片中心为轴心&#xff0c;截取正方型&#xff0c;然后等比缩放 /// 用于头像处理 /// </summary> /// <param name"postedFile">原图HttpPoste…

普通用户的sudo权限,禁止root用户登录

假如增加用户zhangsan的sudo权限。 修改/etc/sudoers文件&#xff0c;在root下增加如下一行。 增加用户名zhangsan&#xff1a; 禁止root用户登录&#xff1a; 修改/etc/ssh/sshd_config文件&#xff0c; 将 PermitRootLogin前的#号去掉&#xff0c;yes改为no&#xff0c;重启n…

C语言system函数用法

system()函数用于向操作系统传递控制台命令行&#xff0c;以WINDOWS系统为例&#xff0c;通过system()函数执行命令和在DOS窗口中执行命令的效果是一样的&#xff0c;所以只要在运行窗口中可以使用的命令都可以用SYSTEM&#xff08;&#xff09;传递&#xff0c;但要注意的是输…

什么是 MVC ?

ylbtech-Architecture: MVCASP.NET中 MVC。 1.A,概念 MVC是一种目前广泛流行的软件设计模式&#xff0c;MVC英文即Model-View-Controller&#xff0c;即把一个应用的输入、处理、输出 流程按照Model、View、Controller的方式进行分离&#xff0c;这样一个应用被分成三 个层——…

zabbix邮件报警

原文出自http://www.iyunv.com/thread-22904-1-1.html 首先web端的配置顺序如下&#xff1a; 创建用户媒介-->创建用户组和用户-->针对trigger&#xff08;触发器&#xff09;添加报警动作&#xff0c;设置邮件发送用户及媒介1. 创建用户媒介创建用户媒介-->创建用户…

ubuntu下定时执行工具cron开启关闭重启

配置文件一般为/etc/init.d/cron 启动&#xff1a;sudo /etc/init.d/cron start 关闭&#xff1a;sudo /etc/init.d/cron stop 重启&#xff1a;sudo /etc/init.d/cron restart 重新载入配置&#xff1a;sudo /etc/init.d/cron reload 可以用ps aux | grep cron命令查看cron是否…

Linux运维学习大纲

1、linux系统基础&#xff0c;这个不用说了&#xff0c;是基础中的基础&#xff0c;连这个都不会就别干了&#xff0c;参考书籍&#xff0c;可以看鸟哥linux基础篇&#xff0c;至少要掌握这书60%内容&#xff0c;没必须全部掌握&#xff0c;但基本命令总得会吧2、网络服务&…

zabbix的入门到精通之zabbix的触发器Trigger

第1章 Trigger 1.1 创建一个trigger选择&#xff1a;ConfigurationHost双击: Trigger双击:Create Trigger(位置在右上角)后图下图所示NameTrigger的名字Expression添加Trigger表达式&#xff0c;双击add后添加Multiple PROBLEM events generationDescription对trigger的描述URL…

Zabbix 探索主机 “Discovery” 自动发现主机 详细图文教程

Zabbix 自动发现&#xff08;Discovery&#xff09;功能使用随着 监控 主机不断增多&#xff0c;有的时候需要添加一批机器&#xff0c;特别是刚用zabbix的童鞋 需要将公司的所有服务器添加到zabbix&#xff0c;如果使用传统办法去单个添加设备、分组、项目、图像…..结果应该是…