Oracle 索引详解(index)

2023-05-16

文章目录

  • 1 概述
  • 2 索引管理
    • 2.1 创建索引
    • 2.2 删除索引
    • 2.3 修改索引
    • 2.4 查询索引
  • 3 索引类型
    • 3.1 B-Tree 平衡树索引
    • 3.2 bitmap 位图索引
    • 3.3 反向键索引
    • 3.4 基于函数索引
  • 4 扩展
    • 4.1 走不走索引的情况

1 概述

1. 索引是什么?  
   (1) 一种供服务器在表中快速查找一行的 '数据库结构'
   (2) '索引之于表',相当于 '目录之于书'(3) rowid 就相当于 '页码'
   
2. 索引的优点
   (1) 提高数据 '检索速度'
   (2) 提高表与表之间的 '连接速度'
   (3) 在使用 order bygroup by 时,可以减少排序和分组的时间
   (4) 保证数据的 '唯一性'unique、主键)

3. 索引的缺点
   (1) 占用 '存储空间',索引 和 表 一样,都需要占用表空间
   (2) 进行 DML 操作时,索引自动维护,从而 '降低 DML 操作的速度'
   (3) 创建索引和维护索引要 '耗费时间',这种时间随着数据量的增加而增加

2 索引管理

create table scott.student_info (  
  sno   number(3) constraint pk_student_info_sno primary key,
  name  varchar2(30),
  sex   varchar2(2),
  age   number(3)
);

2.1 创建索引

create [bitmap] index [schema.]索引名
on [schema.]表名 (列名1, ..., 列名N);

示例1:创建一般索引(B-Tree 索引,默认)

create index scott.idx_si_name on scott.student_info(name);
create index scott.idx_si_name_age on scott.student_info(name, sex);

示例2:创建位图索引(bitmap 索引)

create bitmap index scott.bidx_si_sex on scott.student_info(sex);

2.2 删除索引

drop index scott.idx_si_name_age;

2.3 修改索引

-- 修改索引名称 idx_si_sname -> idx_si_sname_new
alter index scott.idx_si_sname rename to idx_si_sname_new;

-- 修改索引为无效
alter index scott.idx_si_sname_new unusable;

-- 重建索引
alter index scott.idx_si_sname_new rebuild online;

2.4 查询索引

-- 查询权限范围由大至小:dba_* > all_* > user_*
select * from dba_indexes;
select * from all_indexes;
select * from user_indexes;

-- 索引查询
select t.*
  from all_indexes t
 where t.table_owner = 'SCOTT'
   and t.table_name = 'STUDENT_INFO';

-- 索引统计信息
select t.owner,
       t.index_name,
       t.blevel,
       t.leaf_blocks,
       t.num_rows
  from all_ind_statistics t
 where t.table_owner = 'SCOTT'
   and t.table_name = 'STUDENT_INFO';

3 索引类型

3.1 B-Tree 平衡树索引

1. B-Tree 索引
   (1) B 代表 "平衡(balanced)" 是一种树结构 -- 不是 "二叉树" 哦   
   (2) Oracle '默认' 的索引类型

2. 使用场景   
   (1) 列的数据中,'不同值的个数很多'   
   (2) 如:主键列(值不相同、值个数多)      
内部结构英文名功能
根节点root一个 B-Tree 索引只有一个根节点,位于最顶端
分支节点branch包含的条目指向索引里其他的 分支节点 或 叶子节点
叶子节点leaf数据行的键值(key value)、键值对应数据行的 ROWID、双向链表

B-Tree 索引 示意图:
在这里插入图片描述

3.2 bitmap 位图索引

1. bitmap 索引

2. 使用场景   
   (1) 列的数据中,'不同值的个数很少'   
   (2) 如:性别(一般只有三种取值:男、女、未知)

3. 内部逻辑
   (1) 向量相加:全 11,有 00

3.3 反向键索引

-- 索引列 逆序排列 优化  desc
create index 索引名 on 表名(列名) reverse;

create index scott.idx_si_sno_desc on scott.student_info(sno) reverse;

3.4 基于函数索引

-- 索引列 使用函数 优化
create index 索引名 on 表名(函数(列名))

create index scott.idx_si_sname_upper on scott.student_info(sname);

4 扩展

4.1 走不走索引的情况

1. '独立的列':不在索引列做任何操作(包括但不限于: 计算、函数、类型转换)
   正例:  -- id 为 number 类型
   where id = 2
   where id = 1 + 1
     
   反例:
   where id + 1 = 3
   
2. like 查询:'最左原则'
   正例:
   where name like '张三%'  
    
   反例:
   where name like '%张三'
   where name like '%张三%'
   
3. 复合索引:如 (A,B,C) '必须含有 第一个索引 A' 
   正例: -- 原则:A 最常用,B 次之, C 最末   
   where A = 'A'
   
   反例:
   where B = 'B'
     and C = 'c'
     
4. or 运算:所有参与运算的字段 '都存在索引',才会用到索引

5. <>is nullis not null:都不走索引

提示:最直观的 => 看 执行计划

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Oracle 索引详解(index) 的相关文章

  • 前端工程化-loader机制

    前言 xff1a loader是用来加载处理各种形式的资源 xff0c 本质上是一个函数 xff0c 接受文件作为参数 xff0c 返回转化后的结构 loader 用于对模块的源代码进行转换 loader 可以使你在 import 或 加载
  • Java中大量数据批量处理方式

    在订单中心处理订单 xff0c 总会遇到大批量订单处理的业务 xff0c 下面就将如何大批量处理数据来提高效率做一个总结 xff1b 代码设计 xff1a 在dao层写批量新增的方法 以及实现dao的实现类 xff0c 在service调用
  • java 获取视频的时长、大小、格式等信息

    1 最近有一个小的视频处理需求 xff0c 根据传入视频的url获取视频的时长 大小 格式等信息 下面将记录一下 xff1a package Void 64 Author psw 64 Description 获取视频宽高大小时间工具类 i
  • Linux下安装Anaconda3详细教程

    简介 Anaconda是一个开源的包 环境管理器 xff0c 可以用于在同一个机器上安装不同版本的软件包及其依赖 xff0c 并能够在不同的环境之间切换 Anaconda包括Conda Python以及一大堆安装好的工具包 xff0c 比如
  • keil下载出现错误Error:Flash Download failed -“Cortex-M3”问题

    在基本确认配置都正确的情况下 xff0c 可以试一下先擦除flash再下载程序 xff0c 一次不成功可以多擦除几次 本人就是这样解决的 分界线 更新博客 xff1a 前面解决方法
  • 《华为机试》刷题之HJ39 判断两个IP是否属于同一子网

    一 题目 描述 IP地址是由4个0 255之间的整数构成的 xff0c 用 34 34 符号相连 二进制的IP地址格式有32位 xff0c 例如 xff1a 10000011 xff0c 01101011 xff0c 00000011 xf
  • camera调试:i2c不通如何排查?

    这篇文章介绍一下在调试camera驱动的过程 xff0c 最常见的一个问题 xff0c i2c不通导致驱动注册不上 xff0c 应该如何排查 常见的报错log如下 xff1a 1 973566 T1 gc8034 4 0037 driver
  • Linux上好用的截图工具——flameshot

    我在windows上习惯了QQ的Ctrl 43 Alt 43 A截图 xff0c 在linux也想拥有这样愉快截图的体验 xff0c flameshot无疑是一个比较好的选择 flameshot的功能 xff1a 绘画 直线箭头矩形框实心矩
  • Linux下Zsh安装并配置

    Oh My Zsh 是基于 zsh 命令行的一个扩展工具集 xff0c 提供了丰富的扩展功能 本文使用的乌班图系统版本为16 04 一 下载安装zsh 1 首先点击这里下载最新的zsh源码 然后将源码包复制到 usr local目录下 xf
  • vnc viewe连接,同时ubuntu系统显示灰屏解决方案,不显示命令行和菜单栏解决方法

    span class token number 1 span 在Ubuntu上首先需要安装vnc4server span class token macro property apt get install vnc4server span
  • ROS的可视化工具 rviz 的安装与运行

    1 安装rviz sudo apt get install ros kinetic rviz 然后环境检测 安装 rosdep install rviz rosmake rviz 2 运行rviz 打开一个linux终端 xff0c 输入
  • STM32生成互补PWM波(输出前均为低电平)

    STM32的定时器功能很多 xff0c 今天介绍一下生成互补PWM波形 STM32高级定时器1和8的时钟是168MHZ 通用定时器通常是84MHZ 频率通用设置 定时器时钟频率设置的通用写法 一般我们都是设置两个参数 xff0c 分频系数和
  • 解决ubuntu上的samba共享无法被windows访问问题

    年后回来发现自己ubuntu服务器的samba共享访问不了了 先来看看samba的log记录的啥 root cat var log samba log smbd 2022 02 14 09 19 46 514611 0 lib util f
  • Android仿微信未读消息数提示数字之BadgeView的使用

    没事在整理以前上班收藏的一些笔记 xff0c 发现其中的关键字部分有个 BadgeView 不知道是什么东东 xff0c 于是乎搜了下 xff0c 发现也是一个项目中很常用的功能 比如 xff1a 这样的 xff0c 很常见 这是官方的de
  • cocos creator 游戏背景音乐处理(音乐循环淡入淡出等)

    在处理游戏背景音乐中遇到的问题 xff0c 策划对于音乐播放提出新的想法 但由于目前周围没有人尝试过 xff0c 所以自己摸索的来 需求 在同一场景音乐处理 一般同一场景是同一首背景音乐 现需求在同一场景 xff08 时代 xff09 内播
  • Linux 进程状态D Disk Sleep

    Linux进程状态 xff1a S TASK INTERRUPTIBLE xff0c 可中断的睡眠状态 处于这个状态的进程因为等待某某事件的发生 xff08 比如等待socket连接 等待信号量 xff09 xff0c 而被挂起 这些进程的
  • 两个超实用的 Kubernetes 集群中 Flannel 故障排除案例

    自建的 K8s 集群的坑不少 尤其是到了 Node 数量越来越多之后 问题也逐渐显露了出来 博客主要介绍我们使用flannel之后遇到的两个问题以及解决方案 问题其实不严重 只是涉及到了底层的结构 改动时候要小心 问题 1 flannel
  • 解决zsh: command not found问题

    zsh command not found 看字面意思就是找不到这个方法 xff0c 缺少环境变量配置 1 打开zsh配置文件 open zshrc 2 添加缺少的文件路径 PATH 61 34 Users mengmeng Downloa
  • Python两大爬虫库

    文章目录 Python两大爬虫库urllib库urllib库使用urllib request实验案例 xff1a 模拟头部信息 requests库实验案例 get请求实验案例 抓取网页实验案例 响应 在使用Python爬虫时 xff0c 需
  • amixer命令

    简述amixer及其用法 alsamixer是Linux 音频架构ALSA中的Alsa工具的其中一个 xff0c 用于配置音频的各个参数 alsamixer是基于文本下的图形界面的 xff0c 可以通过键盘的上下键 xff0c 左右键等 x

随机推荐

  • 安装ubuntu系统中磁盘分区

    硬件 xff1a vostro 1450 xff0c 本身有一块机械硬盘HDD xff08 500G xff09 加了一块固态硬盘SSD xff08 120G xff09 xff0c 组成HDD 43 SSD双硬盘 目的 xff1a SDD
  • Could not find encoder for codec id 27: Encoder not found

    在detectron2测试demo时出现如题所示问题 xff0c 解决 xff1a 改 xff1a fourcc 61 cv2 VideoWriter fourcc 34 x264 34 为 xff1a fourcc 61 cv2 Vide
  • Ubuntu查看磁盘使用情况

    xff08 1 xff09 查看文件大小 查看当前文件夹下所有文件大小 xff08 包括子文件夹 xff09 du sh du h 15M package 16K fontconfig 4 0K cache 5 1M rpmdb 20M 查
  • 最简单的方式解决ubuntu 16.04 屏幕亮度问题

    本教程不需要修改grub xff08 因为我的ubuntu 没有 sys class backlight intel backlight brightness 这个目录 xff09 xff0c 我也装过brightness indicato
  • 按列合并两个.txt 文件

    一颗行走的大白菜 转载请标明出处 网上给出了好多答案 xff0c 动辄几十行的python 脚本让人好烦 xff0c 然后我们的linux仅仅需要一条命令就能解决 xff1a 先给出截图 xff1a 我要合并read txt read1 t
  • python: np.pad() 函数的用法

    在卷积神经网络中 xff0c 为了避免因为卷积运算导致输出图像缩小和图像边缘信息丢失 xff0c 常常采用图像边缘填充技术 xff0c 即在图像四周边缘填充0 xff0c 使得卷积运算后图像大小不会缩小 xff0c 同时也不会丢失边缘和角落
  • matlab 如何使用mex

    MATLAB与C语言混合编程接口 MATLAB是一种解释性语言 xff0c 不需要编译 xff0c 调试比较方便 xff0c 但是缺点是速度慢 这一点在执行复杂的科学算法的时候体现极为明显 而C语言虽然相对比 较复杂 xff0c 但是执行效
  • 关于在终端能到import模块 而在jupyter notebook无法导入的问题

    这个问题让我查了许多天才解决 xff0c 为了避免后面的人重复走弯路 xff0c 记录下来 问题描述 xff1a 我在ubuntu 下编译安装了caffe xff0c 在命令行模式下可以import caffe xff0c 但是在jupyt
  • PCA原理

    版权声明 xff1a 本文为博主原创文章 xff0c 未经博主允许不得转载 https blog csdn net zhongkelee article details 44064401 转载请声明出处 xff1a http blog cs
  • 当表格太大超过一栏时

    表格大小的调整 当表格太大超过一栏时 xff0c 可以调节 首先文章导言区加入 usepackage graphicx 然后在要缩小的位置加入语句 resizebox 0 5 textwidth 要缩小的表格 要注意的是要把待缩小的表格放到
  • 安装了keras,报错 importerror: no module named kears

    原因可能如下 xff1a 你使用的python 默认是2 7 或者是3 6 xff0c 而keras 安装到了python3 5或python 3 6 的路径下 xff0c 此时 xff0c 你需要重新安装keras并指定安装路径 可以测试
  • module.exports、exports和export、export default的区别,import和require的区别

    在vue及其他模块化开发中 xff0c 经常会用到这些输出和引用的语句 xff0c 那么 xff0c 怎么在合适的时候用合适的语句呢 xff0c 怎么区分它们呢 xff1f 一 理论区别 首先 xff0c module exports和ex
  • Linux docker 安装

    先执行wget qO https get docker com sh 命令安装docker 执行该命令可能会出现wget命令找不到的问题 xff0c 那我们就先要执行yum install wget 命令安装wget 安装完后就可以使用wg
  • ITK和VTK比较

    概念比较安装步骤遇到的问题 概念比较 基本概念ITK xff08 Insight Segmentation and Registration Toolkit xff09 VTK xff08 visualization toolkit xff
  • 关于12864液晶屏汉字显示问题

    在我们学习或者开发12864显示屏 xff08 带字库 xff09 的过程中 xff0c 可能大家会遇到我这样的情况 如下 xff1a 第三行的 数学 两字显示不出来 xff1f 而第四行却可以 xff0c 为什么 xff1f 答案显而易见
  • IOS10-IOS13屏蔽系统更新描述文件|去除‘设置’①小红点教程

    大家都知道在iPhone系统更新的时候都会提示咱们进行更新 xff0c 但是有些小伙伴不想更新 xff0c 但是不更新有一个小红点1这样人很烦躁 xff0c 对于强迫症的人实在是忍不了 xff0c 今天我就给大家分享一个方法 xff0c 只
  • iOS13屏蔽系统自动更新,去除①红标,这个文件复活了!

    iPhone手机系统每一次发布新版本 xff0c 大家经常会接收到系统自动推送的升级提示 xff0c 经常会在大家不知情的情况下系统就在后台自动把系统升级包给自动下载下来了 xff0c 经常会弹出一个提示窗提醒升级 xff0c 这对于一些不
  • AC代码

    此处省略一万分AC代码 加油咯 xff01 xff01 xff01 代码还是尽量自己写 xff0c 看别人的博客不是不可以 xff0c 看别人的代码也不是不可以 xff0c 如果你不看比人的博客 xff0c 不看别人的代码 xff0c 不看
  • Oracle group by 扩展函数详解(grouping sets、rollup、cube)

    文章目录 1 概述2 分组函数2 1 group by xff1a 一起分组 xff08 1 xff09 2 2 grouping sets xff1a 单独分组 xff08 N xff09 2 3 rollup xff1a 累计累加 xf
  • Oracle 索引详解(index)

    文章目录 1 概述2 索引管理2 1 创建索引2 2 删除索引2 3 修改索引2 4 查询索引 3 索引类型3 1 B Tree 平衡树索引3 2 bitmap 位图索引3 3 反向键索引3 4 基于函数索引 4 扩展4 1 走不走索引的情