Oracle索引详解

news/2024/5/19 20:59:01/文章来源:https://blog.csdn.net/Hao1999_/article/details/126636061

索引

类似于书的目录,提高查询效率。

创建索引语法:

 CREATE [UNIQUE] [BITMAP] INDEX 索引名称 ON 表名(字段,[字段,..,..]);名词解释:UNIQUE 唯一索引BITMAP 位图索引默认不写 UNIQUE 和 BITMAP 为普通索引表名后面写多个字段为复合索引在字段加函数为函数索引注意:当给表中字段添加主键约束或唯一约束时会自动生成一个索引

示例1:创建主键约束和唯一约束

1)创建INDEX_TB

 CREATE TABLE INDEX_TB(ID NUMBER,NAME VARCHAR2(30),SEX CHAR(2),AGE NUMBER(3));

2)给INDEX_TB表中添加数据

 BEGINFOR V IN 1..10000 LOOPIF MOD(V,2) = 1 THENINSERT INTO INDEX_TB VALUES(V,CHR(FLOOR(DBMS_RANDOM.value(45000,60000)))||CHR(FLOOR(DBMS_RANDOM.value(45000,60000))),'男',FLOOR(DBMS_RANDOM.value(18,100)));ELSEINSERT INTO INDEX_TB VALUES(V,CHR(FLOOR(DBMS_RANDOM.value(45000,60000)))||CHR(FLOOR(DBMS_RANDOM.value(45000,60000))),'女',FLOOR(DBMS_RANDOM.value(18,100)));      END IF;END LOOP;END;

3)给INDEX_TB表中的ID列添加主键

 alter TABLE index_tb add constraint pk_id primary key(ID);

当我给表中添加主键约束时,会发现表中已经有索引了。

4)删除INDEX_TB表中的主键约束,为其添加唯一约束

 alter table index_tb drop constraint PK_ID; -- 删除主键约束alter table index_tb add constraint unique_id unique(ID); -- 添加唯一约束

这个时候我们再次查看表就发现,表中已经默认生成索引了

示例2:创建普通索引

 CREATE INDEX PT_IND ON INDEX_TB(NAME);什么叫普通索引?任何列都可以创建        

示例3:创建唯一索引

 CREATE UNIQUE INDEX u_ind ON INDEX_TB(AGE);

如上图所示:

当我们需要给表中某个列添加唯一索引时,那么该列的值中不能出现重复值,否则添加失败;同理,当我们给某个列添加上唯一索引时,那么该列也会被添加上唯一约束,以后该列就不能在添加重复数据了。

示例4:创建位图索引

 CREATE BITMAP INDEX m_ind ON INDEX_TB(sex);

什么是位图索引?

位图索引适合建立在基数小的列,例如:性别、地区、婚姻状况等列。

示例5:创建复合索引

CREATE UNIQUE INDEX fh_ind ON INDEX_TB(id,name,sex);

注意:

在使用复合索引时一定要保证最左原则,也就是说当我在查询时,我where条件中没有id列,而是其他俩个列则索引失效。

验证:

EXPLAIN PLAN FOR
SELECT * FROM INDEX_TB WHERE SEX = '男';
SELECT * FROM TABLE(DBMS_XPLAN.display);

如上图所示,该语句并没有走我创建的复合索引(fh_ind),如果我将where条件换成id则不一样,测试如下显示:

EXPLAIN PLAN FOR
SELECT * FROM INDEX_TB WHERE ID = 888;
SELECT * FROM TABLE(DBMS_XPLAN.display);

示例6:函数索引

已知在示例2中我已经创建了普通索引,但是,不管什么索引,当我们在索引列上使用函数时,索引就会失效。测试如下:

EXPLAIN PLAN FOR
SELECT * FROM INDEX_TB WHERE ASCII(NAME) = 48615;
SELECT * FROM TABLE(DBMS_XPLAN.display);

如上图所示,我在示例2中为name列创建的普通索引pt_ind没有被使用。其原因是因为我在索引列上使用了函数。但是在实际工作中,我们有时候必须要使用函数,该怎么办呢?我们可以为其创建一个函数索引。如下:

CREATE INDEX HS_ind ON INDEX_TB(ASCII(NAME)); -- 为name列添加函数索引
-- 再次执行上一条代码
EXPLAIN PLAN FOR
SELECT * FROM INDEX_TB WHERE ASCII(NAME) = 48615;
SELECT * FROM TABLE(DBMS_XPLAN.display);

如上图所示,当我再次查看执行计划时,发现该语句在执行是使用了索引。

说白了,函数索引就是基于对表中列计算后的结果创建索引。

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

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

相关文章

activeMQ、rabbitMQ学习对比心得

一、activemq activemq工作模型比较简单。只有两种模式 queue、topics 。 queue就多对一,producer往queue里发送消息,消费者从queue里取,消费一条,就从queue里移除一条。如果一个消费者消费速度不够快怎么办呢?在act…

About-Flink

About-Flink 一、Flink简介 1.1、flink特点1.2、分层Api1.3、Flink vs Spark Streaming 二、Flink批处理应用 2.1、依赖的引入2.2、准备批处理文件2.3、wordCount编码2.4、自定义类 三、Flink流处理应用 3.1、wordCount编码3.2、设置并行度-默认为43.2、数据来源socket3.3、配…

通过 replace() 和正则实现 将文本中的所有数字颜色高亮

实现的效果: 用到的知识点: replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。 repalce( a, b ) 必须传两个值,其中a 是要替换的文本,或者满足条件…

javaweb JAVA JSP球鞋销售系统购物系统ssm购物系统购物商城系统源码(ssm电子商务系统)

JSP球鞋销售系统购物系统ssm购物系统购物商城系统源码(ssm电子商务系统)

生产和同城存储双活架构下,发生脑裂问题影响数据库读写,如何快速分析问题和解决问题?

数据中心脑裂问题,简单说就是两个数据中心间的网络和存储链路同时发生中断,导致两个数据中心内的应用、数据库或者操作系统同时抢占和利用共享的资源,造成资源的数据不一致,产生重大影响。如何避免脑裂是每个存储双活方案都需要尤为重视的问题,脑裂会带来长时间的存储读写…

linux上redis单机的安装

1. 官网下载 https://github.com/redis/redis/archive/7.0.4.tar.gz 2. 上传到虚拟机/data/目录下、解压 tar -xzvf redis-7.0.4.tar.gz 3. 进入redis-7.0.4此目录 cd redis-7.0.4;ll 4. 安装到指定目录中 a. mkdir /usr/local/redis b. make PREFIX/usr/local/redis inst…

沃尔玛、eBay、wish、新蛋等美系平台对于测评风控点有哪些?怎么解决

很多人把各大平台风控想得过于简单,以为注册一批买家账号配一个IP就能进行下单上评,这也是导致市面上的测评现象杂乱无章。但是一定要明白一点各大电商平台都是一家数据公司他的算法一定是根据市场的变化而不断调整的。 平台检测的方式有很多种 1、平台…

RabbitMQ入门(二)

1.概述 RabbityMQ整体上是一个生产者和消费者模式。生产者生产消息到消息中间件的服务节点(Broker),服务节点中包含交换器(Exchange)和队列(Queue),生产的消息首先经过交换器,再由交…

搭建vue3项目

搭建vue3项目搭建准备创建项目选择所需配置运行项目vue3已经被大众所熟悉,很多公司都在做vue2到vue3的升级。 介绍vue3项目的搭建过程 搭建准备 前端开发环境需要node.js&npm node下载地址:http://nodejs.cn/download/ 根据自己电脑环境下载就行 安装vue-cli3…

2022/08/31 day14:企业级解决方案

文章目录目录缓存预热缓存雪崩缓存击穿缓存穿透性能指标监控总结目录 面试问题 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EtBtkGNE-1661933471760)(en-resource://database/5507:1)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下…

抖音小程序模板全行业整理合集,抖音小程序制作平台分享

小弟我是来自第三方抖音小程序制作平台的打工人,给大家整合了一些我们平台的抖音小程序模板,大家可以根据需要来获取。 步骤就是点击下方的链接,选好自己的抖音小程序模板,在平台注册账号直接套用到自己的抖音小程序上&#xff0…

深入理解蓝牙BLE之“信道管理”

目录 一.BLE的调制解调: 二.BLE的信道: 三.BLE的广播信道: 四.BLE的数据信道: 五.BLE信道管理: 5.1广播信道的随机延时: 5.2数据信道的调频算法: 跳频算法1: 跳频算法2&…

02.Haoop 虚拟机 桥接与NAT之间区别 及桥接设置

首先说 我的硬件准备,1台windows系统,1台mac pro 。 在 物理机上使用了 VMWARE CENTOS 7 的 方式进行配置。 那么我希望能实现把 这2台机器连在一起,做Hadoop 的集群。 网络问题是首先需要解决的事情,主要不通物理主机之间一直…

02:入门及安装(狂神说RabbitMQ)

RabbitMQ入门及安装 https://www.bilibili.com/video/BV1dX4y1V73Gp27 概述 简单概述: RabbitMQ是一个开源的遵循 AMQP协议实现的基于 Erlang语言编写,支持多种客户端(语言),用于在分布式系统中存储消息&#xff0…

Spring Security 入门之自定义表单登录开发实现(三)

文章目录1. 前言2. 自定义认证2.1 自定义登录页面2.2 后端认证逻辑3. 自定义登陆成功处理3.1 登陆成功原理3.2 自定义登陆成功响应处理4. 自定义登陆失败处理4.1 登陆失败原理4.2 自定义登陆失败响应处理5. 注销用户处理5.1 注销原理总结1. 前言 在弄懂HelloWorld案例后&#…

Node.js | 使用内置模块 event 实现发布订阅模式

🖥️ NodeJS专栏:Node.js从入门到精通 🖥️ 蓝桥杯真题解析:蓝桥杯Web国赛真题解析 🧧 加入社区领红包:海底烧烤店ai(从前端到全栈) 🧑‍💼个人简介&#xff…

自动化测试中的验证码问题

做自动化测试的同学在面试的时候经常会遇到这问题,而且我们在实际的工作中也会遇到这个问题,那么这问题到底该怎么处理? 下面给出了面试过程中常见的相关面试题供大家参考: 01 在做自动化登陆的同时,如何绕过验证码&a…

windows下安装docker

下载docker,通过Redirecting…这个下载docker 正在上传…重新上传取消 下载完安装 安装完成后,进入powershell,输入命令docker network ls,查看docker网络,如果没有bridge项目,创建容器会报错(Windows容器就是两…

3D格式转换神器HOOPS Exchange使用教程(一):打印组件结构

HOOPS Exchange是什么? HOOPS Exchange 是一组软件库,可以帮助开发人员在开发应用程序时读取和写入主流的 2D 和 3D 格式。HOOPS Exchange 支持在主流的3D 文件格式中读取 CAD 数据,并支持将 3D 数据转换为 PRC 数据格式,这是一种…

NGINX源码之:event与epoll

在进入正题之前,先来大概了解下epoll: 引入多路复用之前socket建立连接流程: 1、服务端先建立socket(serversocket)占用一个文件描述符fd,然后bind端口,开启监听listen accept事件; 2、客户端请…