【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的专栏算法与数据结构的专栏等其他专栏,快去我的主页关注我吧

请添加图片描述

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

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

相关文章

Vue+Element-ui实现表格本地导入

表格文件存储在前端 如图,表格文件template.xlsx存储在public下的static文件夹下 注意这里的路径容易报错 a链接下载文件失败的问题(未发现文件) a.href ‘./static/template.xlsx’ 写的时候不能带public,直接这么写就可以 DownloadTemp…

Linux进程概念及其状态

文章目录 🍇1. 什么是进程🍈1.1 概念🍈1.2 理解进程 🍋2. Linux的PCB🍎3. 查看进程 & 杀死进程🍒4. 系统调用获取进程标识符🍓4.1 进程PID🍓4.2 父进程PPID 🍆5. 系统…

uniapp 微信小程序添加隐私保护指引

隐私弹窗&#xff1a; <uni-popup ref"popup"><view class"popupWrap"><view class"popupTxt">在你使用【最美万年历】之前&#xff0c;请仔细阅读<text class"blueColor" click"handleOpenPrivacyContract…

Linux学习之lvm删除

umount /mnt/logicvolumntest卸载挂载。 lvremove /dev/vgname/my_lv可以删除逻辑卷&#xff0c;其中vgname是指定逻辑卷所在的卷组名称&#xff0c;my_lv是逻辑卷的名称。 注意&#xff1a;使用lvremove命令会永久删除逻辑卷和其中的数据&#xff0c;因此请在使用之前进行适当…

解决springboot项目中的groupId、package或路径的混淆问题

对于像我一样喜欢跳跃着学习的聪明人来说&#xff0c;肯定要学springboot&#xff0c;什么sevlet、maven、java基础&#xff0c;都太老土了&#xff0c;用不到就不学。所以古代的聪明人有句话叫“书到用时方恨少”&#xff0c;测试开源项目时&#xff0c;编译总是报错&#xff…

【FreeRTOS】互斥量的使用与逐步实现

在FreeRTOS中&#xff0c;互斥量是一种用于保护共享资源的同步机制。它通过二进制信号量的方式&#xff0c;确保在任意时刻只有一个任务可以获取互斥量并访问共享资源&#xff0c;其他任务将被阻塞。使用互斥量的基本步骤包括创建互斥量、获取互斥量、访问共享资源和释放互斥量…

RNN 单元:分析 GRU 方程与 LSTM,以及何时选择 RNN 而不是变压器

一、说明 深度学习往往感觉像是在雪山上找到自己的道路。拥有坚实的原则会让你对做出决定更有信心。我们都去过那里 在上一篇文章中&#xff0c;我们彻底介绍并检查了 LSTM 单元的各个方面。有人可能会争辩说&#xff0c;RNN方法已经过时了&#xff0c;研究它们是没有意义的。的…

Python Opencv实践 - 轮廓检测

import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/map.jpg") print(img.shape) plt.imshow(img[:,:,::-1])#Canny边缘检测 edges cv.Canny(img, 127, 255, 0) plt.imshow(edges, cmapplt.cm.gray)#查找轮廓 #c…

pdf怎么删除其中一页?

pdf怎么删除其中一页&#xff1f;现在&#xff0c;pdf文件已经深入影响着我们的工作和学习&#xff0c;如果你是一个上班族&#xff0c;那么几乎每天都会使用到pdf格式的电脑文件。当我们阅读一个页数众多的PDF文件时&#xff0c;可能会发现实际上只需要其中的一小部分内容。很…

jvm-堆

1.堆的核心概念 一个jvm实例只存在一个堆内存&#xff0c;堆也是java内存管理核心区域 java堆区在jvm启动的时候即被创建&#xff0c;其空间大小就确定了&#xff0c;是jvm管理最大的一块内存空间&#xff1b; 堆可以处于物理上不连续的内存空间&#xff0c;但在逻辑上它应该被…

Sqoop实操案例-互联网招聘数据迁移

&#x1f947;&#x1f947;【大数据学习记录篇】-持续更新中~&#x1f947;&#x1f947; 个人主页&#xff1a;beixi 本文章收录于专栏&#xff08;点击传送&#xff09;&#xff1a;【大数据学习】 &#x1f493;&#x1f493;持续更新中&#xff0c;感谢各位前辈朋友们支持…

在 macOS 中安装 TensorFlow 1g

tensorflow 需要多大空间 pip install tensorflow pip install tensorflow Looking in indexes: https://pypi.douban.com/simple/ Collecting tensorflowDownloading https://pypi.doubanio.com/packages/1a/c1/9c14df0625836af8ba6628585c6d3c3bf8f1e1101cafa2435eb28a7764…

面试被打脸,数据结构底层都不知道么--回去等通知吧

数据结构之常见的8种数据结构&#xff1a; -数组Array -链表 Linked List -堆 heap -栈 stack -队列 Queue -树 Tree -散列表 Hash -图 Graph 数据结构-链表篇 Linklist定义&#xff1a; -是一种线性表&#xff0c;并不会按线性的顺序存储数据&#xff0c;即逻辑上相邻…

Spring Boot源码解读与原理剖析:深入探索Java开发的奥秘!

评论区留言赠书15本 关注点赞评论&#xff0c;评论区回复“Spring Boot源码解读与原理剖析&#xff1a;深入探索Java开发的奥秘&#xff01;” 每篇最多评论3条&#xff01;&#xff01;采用抽奖助手自动拉取评论区有效评论送书两本&#xff0c; 开奖时间&#xff1a;9月11号 承…

Git的基本使用笔记——狂神说

版本控制 版本迭代&#xff0c; 版本控制( Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史&#xff0c;方便查看更改历史记录&#xff0c;备份以便恢复以前的版本的软件工程技术。 实现跨区域多人协同开发 追踪和记载一个或者多个文件的…

封装(个人学习笔记黑马学习)

1、格式 #include <iostream> using namespace std;const double PI 3.14;//设计一个圆类&#xff0c;求圆的周长 class Circle {//访问权限//公共权限 public://属性//半径int m_r;//行为//获取圆的周长double calculateZC() {return 2 * PI * m_r;} };int main() {//通…

科技驱动产业升级:浅谈制造型企业对MES系统的应用

在科技不断进步的背景下&#xff0c;制造型行业也在持续发展&#xff0c;但随之而来的挑战也不断增加。传统的管理方式已经无法满足企业的需求&#xff0c;因此许多制造型企业开始寻找新的管理模式。制造执行系统&#xff08;MES&#xff09;作为先进的制造信息技术之一&#x…

java-初识Servlet,Tomcat,JDBC

文章目录 前言一、ServletServlet 生命周期Servlet 实例Servlet 过滤器 二、TomcatJDBCJDBC连接数据库实例 总结 前言 java入门须知的重要概念/名词/技术 等 一、Servlet Servlet是Java Web开发中的一个核心组件&#xff0c;它是基于Java语言编写的服务器端程序&#xff0c;…

Sentinel配置的blockHandler方法不生效

①首先配置流控的资源名跟SentinelResource中的Value配置的一定要一直且唯一 ②其次blockhandler后面的方法一定要跟下面指定的方法名称是一样的 ③也就是我犯下的错误&#xff0c;一定要注意是上面那个才是Sentinel的&#xff0c;下面的是sun公司的…我说呢&#xff0c;一直…

详解mysql事务,事务并发安全问题的复现以及大事务的优化

好文推荐&#xff1a; 2.5万字详解23种设计模式 springboot 实现延时队列&#xff08;超级实用&#xff09; 2.5万字讲解DDD领域驱动设计 文章目录 1. 事务定义2. 事务特性&#xff08;ACID&#xff09;3. 事务并发问题4. 事务隔离级别5. 基础命令6. 脏读复现7. 不可重复读复现…