【SQL应知应会】索引 • Oracle版:B-树索引;位图索引;函数索引;单列与复合索引;分区索引

请添加图片描述

欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享,与更多的人进行学习交流

本文免费学习,自发文起3天后,会收录于SQL应知应会专栏,本专栏主要用于记录对于数据库的一些学习,有基础也有进阶,有MySQL也有Oracle

请添加图片描述

索引 • MySQL版

  • 前言
  • 一、Oracle索引
  • 1.索引概述及分类
    • B-树索引
    • 位图索引
    • 函数索引
    • 唯一性索引与非唯一性索引
    • 单列索引与复合索引
  • 2. 索引使用原则
  • 3.创建索引
    • 3.1 索引创建语法
    • 3.2 索引创建案例
      • 3.2.1 例1:非唯一性索引
      • 3.2.2 例2:唯一性索引
      • 3.2.3 例3:位图索引
      • 3.2.4 例4:函数索引
  • 4.分区索引
    • 3.1分区索引概念
    • 2.分区索引案例
      • 2.1 创建本地分区索引
      • 2.2全局分区索引
      • 3.全局非分区索引

前言

✅今天继续SQL的索引的第 4 篇文章,主要讲到了Oracle的索引:从有哪些索引出发,到索引的使用原则,针对每种索引进行创建演示,最后是分区索引的认识和使用
✴️文章中提供了代码和很具体的截图,代码是为了减轻大家学习的难度,同时用截图可以更形象的让大家去理解知识点想要表达的意思,希望大家跟着一起学起来
💖希望文章的内容对大家有所帮助,如果有什么不足的地方,大家可以在评论区或者私信我,感谢大家的支持
💻那么,快拿出你的电脑,跟着文章一起学习起来吧

一、Oracle索引

1.索引概述及分类

  • 索引是一种提高数据检索效率的数据库对象, 能够为数据的查询提供快捷的存取路径, 减少磁盘 I/O。

  • 虽然索引是基于表而建立的, 但索引并不依赖于表。

  • 索引由系统自动维护和使用,不需要用户参与。

  • Oracle 数据库为了提高数据检索性能, 提供了多种类型的索引, 以满足不同的应用需求。

B-树索引

  • 按平衡树结构组织的索引, 是最常用的索引, 也是默认创建的索引类型。
  • B-树索引占用空间多, 适合索引值取值范围广( 基数大) 、 重复率低的应用。

位图索引

  • 按位图结构组织的索引, 适合索引值取值范围小( 基数小), 重复率高的应用。

函数索引

  • 基于包含索引列的函数或表达式创建的索引( 索引值为计算后的值)。

唯一性索引与非唯一性索引

  • 唯一性索引是索引值不重复的索引, 非唯一性索引是索引值可以重复的索引。 在默认情况下, Oracle 创建的索引是非唯一性索引。 当在表中定义主键约束或唯一性约束时, Oracle 会自动在相应列上创建唯一性索引。

单列索引与复合索引

  • 索引可以创建在一个列上, 也可以创建在多个列上。 创建在一个列上的索引称为单列索引, 创建在多个列上的索引称为复合索引。

2. 索引使用原则

由于索引作为一个独立的数据库对象存在, 占用存储空间, 并且需要系统进行维护, 因此索引的使用需要遵循下列原则:

  • 导入数据后再创建索引

  • 在适当的表和列上创建适当的索引

  • 如果经常查询的记录数目少于表中记录总数的5%时就应当创建索引;
  • 如果经常进行连接, 应该在连接列上建立索引;
  • 对于取值范围很大的列应当创建 B 树索引, 而对于取值范围很小的列应当创建位图索引
  • 合理设置复合索引中列的顺序, 应将频繁使用的列放在其他列的前面

  • 限制表中索引的数目。 表中索引数目越多, 查询速度越快, 但表的更新速度越慢

  • 选择存储索引的表空间。 在默认情况下, 索引与表存储在同一表空间中【MySQL的MyISAM引擎是索引与数据是分开的,InnoDB引擎就是索引和数据在一起】

3.创建索引

3.1 索引创建语法

create [unique] [bitmap] index on [schema.]table(column[asc|desc][,...]) [reverse] [parameter_list];其中:
unique 表示建立唯一性索引
bitmap 表示建立位图索引
asc|desc 用于指定索引值的排列顺序,asc表示按升序排列,desc表示按降序排序(默认值为asc)
reverse 表示建立反键索引
parameter_list 用于指定索引的存放位置、存储空间分配和数据块参数设置

3.2 索引创建案例

3.2.1 例1:非唯一性索引

  • 在emp表的last_name列上创建一个非唯一性索引
create index emp_lname_index on emp(last_name) tablespace index;
## tablespace index 表示索引存储在名为 index 的表空间中,也就是说,数据将会在此表空间中进行存储和管理

3.2.2 例2:唯一性索引

  • 在emp表的email列上创建一个唯一性索引
create unique index emp_email_index on emp(email) tablespace index;

3.2.3 例3:位图索引

  • 在emp表的job_id列上创建一个位图索引
create bitmap index emp_job_index on emp(job_id)  tablespace index;

3.2.4 例4:函数索引

  • 基于emp表的first_name 列创建一个函数索引
create index emp_fname_index on emp(upper(first_name))  tablespace index;

4.分区索引

  • 在Oracle数据库中,索引与表时相互独立的,索引是否分区 与 表是否分区 没有直接关系

  • 不分区的表可以创建分区索引和不分区索引,分区的表也可以创建分区索引或不分区的索引,如下图所示

在这里插入图片描述

3.1分区索引概念

  • 在Oracle数据库中,分区索引分为本地分区索引和全局分区索引

  • 本地分区索引是指为分区表中的各个分区单独创建索引分区,各个索引分区之间是相互独立的,索引的分区与表的分区是一一对应的,如下图所示,为分区表创建了本地分区索引后,Oracle会自动对表的分区和索引的分区进行同步维护
    在这里插入图片描述

  • 全局分区索引是指先对整个表建立索引,然后再对索引进行分区。索引的分区之间不是相互独立的,索引分区与表分区之间也不是一一对应的,如下图6-3所示;也可以为分区表创建非分区的全局索引,如下图6-4所示
    在这里插入图片描述

2.分区索引案例

2.1 创建本地分区索引

  • 分区表创建后,可以对分区表创建本地分区索引,在指明分区方法时使用local关键字标识本地分区索引
# 例:在student_range分区表的sname列上创建本地分区索引
create index student_range_local on student_range(sname) local

2.2全局分区索引

  • 与表分区方法类似,索引分区方法也包括范围分区、列表分区、散列分区和复合分区等,在指明分区方法时使用global关键字标识全局分区索引
# 例:为分区表student_list的sage列建立基于范围的全局分区索引
create index student_list_global on student_list(sage) global 
partition by range(sage)
(partition p1 values less than (80) tablespace orcltbs1,partition p1 values less than (maxvalue) tablespace orcltbs2
)

3.全局非分区索引

  • 为分区表创建全局非分区索引与为标准表创建索引一样
# 例:为分区表student_list_index创建全局非分区索引
create index student_list_index on student_list_index(sname) tablespace index

😘感谢大家耐心的看完这篇文章,这篇文章是SQL索引的第4篇文章,关于Oracle的索引
✅如果大家觉着内容还算可以,那么就关注一下爱书不爱输的程序猿
🏡也可以加入我的社区一起学习呀
🎁各种专栏,精彩不断

  • SQL应知应会专栏,对于数据库的一些学习,有基础也有进阶,有MySQL也有Oracle
  • UML应知应会专栏,对于UML的一些讲解,应有尽有
  • … … 还有java的专栏算法与数据结构的专栏等其他专栏,快去我的主页关注我吧

请添加图片描述

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

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

相关文章

深入剖析 Golang 程序启动原理 - 从 ELF 入口点到GMP初始化到执行 main!

大家好,我是飞哥! 在过去的开发工作中,大家都是通过创建进程或者线程来工作的。Linux进程是如何创建出来的? 、聊聊Linux中线程和进程的联系与区别! 和你的新进程是如何被内核调度执行到的? 这几篇文章就是…

K 次取反后最大化的数组和【贪心算法】

1005 . K 次取反后最大化的数组和 给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组: 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。 重复这个过程恰好 k 次。可以多次选择同一个下标 i 。 以这种方式修改数组后,返回数组 可能…

打击儿童性虐待,遭多家机构反对,苹果宣布停止开发CSAM检测计划

据报道,苹果公司曾计划在其iCloud云服务中引入一项儿童性虐待资料(CSAM)检测计划,但由于反对声浪日益高涨,该计划最终宣布停止开发。CSAM检测计划的原本目的是为了帮助阻止儿童性虐待资料的传播,保护儿童的…

Go操作各大消息队列教程(RabbitMQ、Kafka)

Go操作各大消息队列教程 1 RabbitMQ 1.1 概念 ①基本名词 当前市面上mq的产品很多,比如RabbitMQ、Kafka、ActiveMQ、ZeroMQ和阿里巴巴捐献给Apache的RocketMQ。甚至连redis这种NoSQL都支持MQ的功能。 Broker:表示消息队列服务实体Virtual Host&#x…

关于购买AirPods,现在是否为最佳时机?

我们不需要解释你为什么想要AirPods。苹果对真正的无线耳机的采用彻底改变了市场,并从那时起大量销售。你总是在记者、同事和名人的耳朵里看到它们——尤其是在我们这个远程工作和Zoom会议的时代。 真正的问题是,你应该现在就买一个,还是在几…

MySQL索引,事务和存储引擎

一、索引 1、索引的概念 ●索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址(类似于C语言的链表通过指针指向数据记录的内存地址)。 ●使用索引后可以不用扫描全表来定位某行的数据,而是先…

博流RISC-V芯片Eclipse环境搭建

文章目录 1、下载 Eclipse2、导入 bouffalo_sdk3、编译4、烧录5、使用ninja编译 之前编译是通过 VSCode 编译,通过手工输入 make 命令编译,我们也可以通过 Eclipse 可视化 IDE 来编译、烧录。 1、下载 Eclipse 至 Eclipse 官网 https://www.eclipse.org…

IntelliJ IDEA 2023.2.1 Android开发变化

IntelliJ IDEA 2023.2.1之前的版本,Empty Activity是指Empty View Activity,而现在Empty Activity是指Empty Compose Activity,另外多了一个Empty View Activity的选项 这表明官方推荐使用Compose这种声明式的编程方式来描述UI,命…

springboot上线打包+vuecli2部署在linux服务器上(打包上线)

这里也是记录一下springboot的上线打包流程,我这里前端使用的是vuecli2 springboot的依赖是2.7.9的版本 前端是使用的vue2 打包前,你的linux上必须要先安装,tomcat\java\nginx springboot打包 springboot打包点击一下,等maven编译打包成功在target文件下找到,jar包, 然后,把j…

C语言:指针的运算

一、指针 或 - 整数 指针 或 - 整数表示指针跳过几个字节(具体跳过几个字节由指针类型决定) 本文不做具体讲解,详解跳转链接: 《C语言:指针类型的意义》 二、指针 - 指针 前提条件:指针类型相同并且指向同…

[学习笔记]斜率优化dp 总结

前言: 我们学过不少优化类的算法了,大部分都是基于凸函数的性质给出的优化,比如Slope Trick,Wqs二分,又比如今天的斜率优化(不知道什么时候会有空把Slope Trick写掉) 正文: 我们考…

应用案例 | 基于三维机器视觉的机器人麻袋拆垛应用解决方案

​Part.1 项目背景 在现代物流和制造行业中,麻袋的拆垛操作是一个重要且频繁的任务。传统的麻袋拆垛工作通常由人工完成,分拣效率较低,人力成本较高,现场麻袋堆叠、变形严重,垛型不规则、不固定,严重影响分…

拓世科技集团 | “书剑人生”李步云学术思想研讨会暨李步云先生九十华诞志庆

2023年,中国改革开放迎来了45周年,改革春风浩荡,席卷神州大地,45年间,中国特色社会主义伟大事业大步迈入崭新境界,一路上结出了饶为丰硕的果实。中华民族在这45年间的砥砺前行,不仅使中国的经济…

解决uniapp下拉框 内容被覆盖的问题

1. 下拉框 内容被覆盖的问题 场景: 现在是下拉框被表格覆盖了 解决办法: 在表格上添加css 样式来解决这个问题 .add-table{display: static;overflow: visible; } display: static: 将元素会按照默认的布局方式进行显示,不会分为块状或行内元素。 overflow: vi…

【用unity实现100个游戏之7】从零开始制作一个仿杀戮尖塔卡牌回合制游戏

文章目录 前言素材资源开始一、UI框架二、挂载脚本三、事件监听,用于绑定按钮事件四、声音管理器五、excel转txt文本六、游戏配置七、用户信息表八、战斗管理器九、 敌人管理器十、玩家血量、能量、防御值、卡牌数十一、敌人血量 行动显示逻辑十二、UI提示效果实现十…

PHP旅游管理系统Dreamweaver开发mysql数据库web结构php编程计算机网页

一、源码特点 PHP 旅游管理系统是一套完善的web设计系统,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 PHP 旅游管理系统 源码下载地址: https://download.csdn.net/download/qq_41…

Docker切换文件系统为VFS

一、介绍 Docker支持AUFS、Btrfs、Device Mapper、OverlayFS、VFS、ZFS六种不同的存储驱动。 1. AUFS AUFS是一种常见的存储驱动程序,它也使用了Linux内核的AUFS文件系统。它的优点是支持所有的Linux发行版,可以在不同的容器之间共享文件系统&#xf…

JVM 对象的内存布局

对象头 Mark word 标记字段 用于存储对象自身的运行时数据,如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等 ClassPoint 类型指针 对象指向它的类型元数据的指针,Java虚拟机通过这个指针 来…

【STM32】学习笔记(TIM定时器)

TIM(Timer)定时器 定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断 16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时 不仅具备基本的定时中断功能,而且…

【MySQL】基础知识(二)

MySQL基础知识(二) 文章目录 MySQL基础知识(二)01 表操作1.1 创建表1.2 查看所有表1.3 查看指定表的结构1.4 删除表练习 02 CURD2.1 新增2.1.1 指定列插入2.1.2 datetime类型插入 2.2 查询2.2.1 全列查询2.2.2 指定列查询2.2.3 查询字段为表达式2.2.4 别名查询2.2.5 去重2.2.6 …