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

news2024/12/26 21:25:02

请添加图片描述

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

本文免费学习,自发文起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.coloradmin.cn/o/962704.html

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

相关文章

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

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

解码自我注意的魔力:深入了解其直觉和机制

一、说明 自我注意机制是现代机器学习模型中的关键组成部分,尤其是在处理顺序数据时。这篇博文旨在提供这种机制的详细概述,解释它是如何工作的,它的优点,以及它背后的数学原理。我们还将讨论它在变压器模型中的实现和多头注意力的…

设计模式-10--多例模式(Multition pattern)

一、什么是多例模式(Multition pattern) 多例模式(Multition pattern)是单例模式的一种扩展,它属于对象创建类型的设计模式。在多例模式中,一个类可以有多个实例,并且这些实例都是该类本身。因…

实现不同局域网间的文件共享和端口映射,使用Python自带的HTTP服务

文章目录 1. 前言2. 本地文件服务器搭建2.1 python的安装和设置2.2 cpolar的安装和注册 3. 本地文件服务器的发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1. 前言 数据共享作为和连接作为互联网的基础应用,不仅在商业和办公场景有广泛的应用…

设计模式-5--适配器模式(Adapter Pattern)

一、什么是适配器模式(Adapter Pattern) 适配器模式(Adapter Pattern)是一种结构型设计模式,它允许将一个类的接口转换成客户端所期望的另一个接口。适配器模式主要用于解决不兼容接口之间的问题,使得原本…

Windows安装jdk

Windows安装jdk 小白教程,一看就会,一做就成。 1.准备安装包(需要的滴滴我) 2.安装 我是在d盘创建jdk目录,把jdk包解压到jdk里 计算机右键---属性---高级系统设置—环境变量 (系统变量里)--新…

小兔鲜儿 - 地址模块

目录 小兔鲜儿 - 地址模块 准备工作​ 静态结构​ 地址管理页​ 地址表单页​ 动态设置标题​ 新建地址页​ 接口封装​ 参考代码​ 地址管理页​ 接口调用​ 参考代码​ 修改地址页​ 数据回显​ 更新地址​ 表单校验​ 操作步骤​ 删除地址​ 侧滑组件用法…

Leetcode 剑指 Offer II 042. 最近的请求次数

题目难度: 简单 原题链接 今天继续更新 Leetcode 的剑指 Offer(专项突击版)系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 写一个 RecentCounter 类来计算特定时间范围内最近的请求。 请实…

4.2 实现基于栈的表达式求值计算器(难度4/10)

本作业主要考察:解释器模式的实现思想/栈结构在表达式求值方面的绝对优势 C数据结构与算法夯实基础作业列表 通过栈的应用,理解特定领域设计的关键作用,给大家眼前一亮的感觉。深刻理解计算机语言和人类语言完美结合的杰作。是作业中的上等…

钉钉机器人消息推送composer拓展 laravel-dingbot

钉钉机器人消息发送 介绍 企业内部有较多系统支撑着公司的核心业务流程,譬如CRM系统、交易系统、监控报警系统等等。通过钉钉的自定义机器人,可以将这些系统事件同步到钉钉的聊天群。 laravel-dingbot 是一款钉钉机器人消息推送的Laravel扩展&#xff…

vscode c语言代码自动格式化

1、在vscode扩展商店里面搜索Clang-format,安装第1个插件 2、快捷键Ctrl逗号,输入format,选择Clang-Format configuration进行配置(其实默认就可以) 3、vscode打开文件夹的源码,在该文件夹里面新建一个文件…

[前端必看,后端福利❤]如何创建美观的邮件模板并通过qq邮箱的SMTP服务向用户发送

最近在写注册功能的自动发送邮箱告知验证码的功能,无奈根本没有学过前端,只有写Qt的qss基础,只好借助网页设计自己想要的邮箱格式,最终效果如下: 也推销一下自己的项目ShaderLab,可运行ShaderToy上的大部分着色器代码&…

js只保留数组对象的某个属性,合并公共类型的数据,选择树形结构的数据,并保留每个节点的name

嗨,今天周二了哎! 期待周五 文章目录 一、js只保留数组对象的某个属性二、合并公共类型的数据二、选择树形结构的数据,并保留每个节点的name 一、js只保留数组对象的某个属性 let data [{ id: 1, name: 哈哈 }, { id: 2, name: 嘻嘻 }]let n…

ModaHub魔搭社区——大模型能力落地和核心就是应用场景

从今年3月百度率先发布语言大模型生成式AI产品“文心一言”后,各大科技互联网巨头纷纷入局,国内大模型瞬间遍地开花。包括阿里、华为、商汤科技、科大讯飞、360、腾讯等,纷纷推出各类大模型。 人工智能正在进入大规模落地应用关键期。 在IDC近日发布的《中国人工智能公有云…

本地虚机Jumpserver使用域名访问报错 使用IP+端口没有错误

背景: 我在本地Windows VMware 15的环境中部署了CentOS7.5,下载jumpserver-offline-installer-v2.28.1-amd64-138.tar.gz并安装部署。 需求: 1、能使用http:ip访问堡垒机。达成; 2、能使用http:域名访问堡垒机。达成&#xff…

FPGA时序分析与约束(2)——时序电路时序

一、前言 在之前的内容中,我们介绍了组合电路的时序问题和可能导致的毛刺,强烈推荐在阅读前文的基础上再继续阅读本文, 前文链接:FPGA时序分析与约束(1)——组合电路时序 这篇文章中,我们将继续…

Android安卓webview,网页端生成安卓项目(极速生成)教程

Android安卓webview,网页端生成安卓项目(极速生成)教程 一,前言 当自己做了一个PC端的页面,也就是前端的页面,或者已经上服的页面,但也想生成一个安卓端供用户使用,本教程详细讲解…

九种情况,要知道灵活变通

九种情况,要知道灵活变通 【安志强趣讲《孙子兵法》第27讲】 第八篇:九变 【全篇大白话】 战场千变万化,胜败看实力,还要看将帅的应变能力。 【原文】 孙子曰:凡用兵之法,将受命于君,合军聚众&a…

解决计算机视觉模型中的种族和性别偏见问题,Meta开源 FACET工具

Meta 公司最新推出的 FACET 工具是为了解决计算机视觉模型中存在的种族和性别偏见问题。该工具经过三万张图片的训练,并含有五万人的图像,特别强调了性别和肤色方面的感知能力。 通过评估计算机视觉模型在不同特征上的表现,FACET 工具可以回答…

vscode远程调试php

使用vscode远程调试php的方法 1.安装remote ssh插件 2.连接服务器 可以点击左下角的绿色按钮,或者ctrlshiftp打开命令框输入remote ssh应该也有。 3.在服务器端vscode安装php debug插件 4.安装xdebug xdebug是用来调试php的软件,原本和vscode没什么关…