当前位置: 首页 > news >正文

【SQL应知应会】索引(三)• MySQL版:聚簇索引与非聚簇索引;查看索引与删除索引;索引方法

请添加图片描述

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

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

请添加图片描述

索引 • MySQL版

  • 前言
  • 一、索引
  • 1.简介
  • 2.索引类型之逻辑分类
  • 3.索引类型之物理分类
    • 3.1 聚簇索引 (clustered index)
    • 3.2 非聚簇索引
    • 3.3 索引方法
      • 3.3.1 B-TREE
      • 3.3.2 B+TREE
      • 3.3.3 HASH
  • 4.查看索引(SHOW INDEX)
    • 4.1 查看索引的语法格式
    • 4.2 示范
  • 5. 删除索引
    • 5.1 删除索引的语法格式
    • 5.2 示范

前言

✅今天继续SQL的索引的第 3 篇文章,主要讲到了聚簇索引与非聚簇索引、查看索引与删除索引、索引方法,大家拭目以待吧!
✴️文章中提供了代码和很具体的截图,代码是为了减轻大家学习的难度,同时用截图可以更形象的让大家去理解知识点想要表达的意思,希望大家跟着一起学起来
💖希望文章的内容对大家有所帮助,如果有什么不足的地方,大家可以在评论区或者私信我,感谢大家的支持
💻那么,快拿出你的电脑,跟着文章一起学习起来吧

一、索引

1.简介

  • 索引(一)中描述了索引的优点与缺点,可以帮助我们更好的理解为什么使用索引以及学习索引应该思考哪些问题。

2.索引类型之逻辑分类

  • 索引(一)中主要讲了索引按逻辑分类后,普通索引和复合索引的创建与应用,其中复合索引的创建是重中之重,重点讲述了六大应用,对于“最左前缀”进行了三种情况的详细分析;
  • 索引(二)重点补充了逻辑分类中的唯一索引、主键索引以及全文索引,并针对唯一索引与复合索引、主键索引与复合索引进行了对比分析,加强对各类索引的理解和应用。

3.索引类型之物理分类

  • 分为聚簇索引(主键索引和唯一索引)和非聚簇索引(有时也称辅助索引或二级索引)
  • 聚簇是为了提高某个属性(或属性组)的查询速度,把这个或这些属性(称为聚簇码)上具有相同值的元组集中存放在连续的物理块。

3.1 聚簇索引 (clustered index)

  • 不是单独的一种索引类型,而是一种数据存储方式。
  • 这种存储方式是依靠B+树来实现的,根据表的主键构造一棵B+树且B+树叶子节点存放的都是表的行记录数据时,方可称该主键索引为聚簇索引。
  • 聚簇索引也可理解为将数据存储与索引放到了一块,找到索引也就找到了数据。

3.2 非聚簇索引

  • 数据和索引是分开的,B+树叶子节点存放的不是数据表的行记录。
  • 虽然InnoDB(支持事务)和MyISAM存储引擎(不支持事务)都默认使用B+树结构存储索引,但是只有InnoDB的主键索引才是聚簇索引,InnoDB中的辅助索引以及MyISAM使用的都是非聚簇索引。
  • 每张表最多只能拥有一个聚簇索引(一个表只能有一个主键)

3.3 索引方法

3.3.1 B-TREE

  • B-树就是B树,多路搜索树,树高一层意味着多一次的磁盘I/O,下图是3阶B树

在这里插入图片描述

  • 特征:
    • 关键字集合分布在整颗树中;
    • 任何一个关键字出现且只出现在一个结点中;
    • 搜索有可能在非叶子结点结束;
    • 其搜索性能等价于在关键字全集内做一次二分查找;
    • 自动层次控制

3.3.2 B+TREE

  • B+树是B-树的变体,也是一种多路搜索树,见图:

在这里插入图片描述

  • 特征:
    • 所有关键字都出现在叶子结点的链表中(稠密索引),且链表中的关键字恰好是有序的;
    • 不可能在非叶子结点命中;
    • 非叶子结点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储(关键字)数据的数据层;
    • 每一个叶子节点都包含指向下一个叶子节点的指针,从而方便叶子节点的范围遍历
    • 更适合文件索引系统

3.3.3 HASH

  • 哈希索引就是采用一定的哈希算法,把键值换算成新的哈希值,检索时不需要类似B+树那样从根节点到叶子节点逐级查找,只需一次哈希算法即可立刻定位到相应的位置,速度非常快。

  • Hash索引仅仅能满足=,IN<=>查询,不能使用范围查询,也不支持任何范围查询,例如WHERE price > 100

  • 由于Hash索引比较的是进行Hash运算之后的Hash值,所以它只能用于等值的过滤不能用于基于范围的过滤,因为经过相应的Hash算法处理之后的Hash值的大小关系,并不能保证和Hash运算前完全一样。
    在这里插入图片描述

4.查看索引(SHOW INDEX)

4.1 查看索引的语法格式

SHOW INDEX FROM <表名> [ FROM <数据库名>]
  • <表名>:指定需要查看索引的数据表名
  • <数据库名>:指定需要查看索引的数据表所在的数据库

4.2 示范

  • emp表的索引情况
    在这里插入图片描述
  • 使用SQL查看
show index from emp;

在这里插入图片描述

  • table : 表名
  • Non_unique : 表示该索引是否是唯一索引
    • 若不是唯一索引,则该列的值为 1;
    • 若是唯一索引,则该列的值为 0
  • Key_name : 索引的名称
  • Seq_in_index : 表示该列在索引中的位置
    • 如果索引是单列的,则该列的值为 1;
    • 如果索引是组合索引,则该列的值为每列在索引定义中的顺序
  • Column_name : 定义索引的列字段
  • Collation :表示列以何种顺序存储在索引中
    • 在 MySQL 中,升序显示值“A”(升序),若显示为 NULL,则表示无分类
  • Cardinality : 索引中唯一值数目的估计值
    • 基数根据被存储为整数的统计数据计数,所以即使对于小型表,该值也没有必要是精确的。基数越大,当进行联合时, MySQL 使用该索引的机会就越大
  • Sub_part : 表示列中被编入索引的字符的数量
    • 若列只是部分被编入索引,则该列的值为被编入索引的字符的数目;
    • 若整列被编入索引,则该列的值为 NULL
  • Packed : 指示关键字如何被压缩。若没有被压缩,值为 NULL
  • Null : 显示索引列中是否包含 NULL
  • Index_type : 显示索引使用的类型和方法( BTREE、 FULLTEXT、 HASH、 RTREE)
  • Comment : 显示注释

5. 删除索引

5.1 删除索引的语法格式

  • 使用 DROP INDEX 语句
DROP INDEX <索引名> ON <表名><索引名>:要删除的索引名
<表名>:指定该索引所在的表名
  • 使用 ALTER TABLE 语句
ALTER TABLE <> + [1/2/3]1DROP PRIMARY KEY:表示删除表中的主键索引
句2DROP INDEX index_name:表示删除名称为 index_name 的索引
句3DROP FOREIGN KEY fk_symbol:表示删除外键

如果删除的列是索引的组成部分,那么在删除该列时,也会将该列从索引中删除;如果组成索引的所有列都被删除,那么整个索引将被删除

5.2 示范

drop index index_empno on emp; # 索引名称为index_empno
# 前面4.2中的示范里,索引的名称是2,使用这条SQL语句删除时,会报错,正常情况下,索引名称都不会这样取得,所以无需纠结这种情况alter table emp drop index index_empno;

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

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

请添加图片描述

相关文章:

【SQL应知应会】索引(三)• MySQL版:聚簇索引与非聚簇索引;查看索引与删除索引;索引方法

欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 本文收录于SQL应知应会专栏,本专栏主要用于记录对于数据库的一些学习&#xff0c;有基础也有进阶&#xff0c;有MySQL也有Oracle 索引 • MySQL版 前言一、索引1.简介2.索引类型之逻…...

rtmp直播

技术要求&#xff1a;nginxnginx-rtmpffmpegVLC 跟着大佬走的&#xff1a; 传送门 准备工作&#xff1a; 首先需要一台公网ip的服务器 这是使用天翼云的弹性云主机&#xff1a;免费试用1个月 天翼云官网 点击关机&#xff0c;更多里面选择重置密码&#xff0c; 默认用户名为…...

4.14 tcp_tw_reuse 为什么默认是关闭的?

开启 tcp_tw_reuse 参数可以快速复用处于 TIME_WAIT 状态的 TCP 连接时&#xff0c;相当于缩短了 TIME_WAIT 状态的持续时间。 tcp_tw_reuse 是什么&#xff1f; TIME_WAIT 状态的持续时间是 60 秒&#xff0c;这意味着这 60 秒内&#xff0c;客户端一直会占用着这个端口。端…...

Python数据分析和爬虫:解析数据的强大工具

引言&#xff1a; 在当今数据爆炸的时代&#xff0c;数据分析和数据提取变得越来越重要。作为一种简洁而强大的编程语言&#xff0c;Python在数据分析和爬虫领域有着广泛的应用。本文将详细介绍Python在数据分析和爬虫中的常用库和技术&#xff0c;并探讨其在实际应用中的优势…...

机器学习之SGD(Stochastic Gradient Descent,随机梯度下降)

SGD&#xff08;Stochastic Gradient Descent&#xff0c;随机梯度下降&#xff09;是深度学习中最基本的优化算法之一。它是一种迭代式的优化方法&#xff0c;用于训练神经网络和其他机器学习模型。以下是关于SGD优化器的重要信息&#xff1a; 基本原理&#xff1a;SGD的基本思…...

leetcode做题笔记100. 相同的树

给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。 思路一&#xff1a; bool isSameTree(struct TreeNode* p, struct TreeNode* q){if(p NULL &…...

【Hadoop】Hadoop入门概念简介

&#x1f341; 博主 "开着拖拉机回家"带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——&#x1f390;开着拖拉机回家_Linux,Java基础学习,大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341; 希望本文能够给您带来一定的…...

前端监控之异常监控(一)

前言 当我们的项目中假设出现了下面几种场景&#xff1a; 点击按钮后&#xff0c;页面无响应页面跳转后显示白屏页面卡顿...... 这些情况都是非常影响用户体验的&#xff0c;对于用户来说&#xff0c;是难以接受的&#xff0c;用户可能就此流失掉了。 因此前端非常有必要针对…...

sql server 、mysql CTE 公用表表达式

sql server 详细 mysql CTE CTE 是一个命名的临时结果集&#xff0c;作用范围是当前语句。CTE可以理解成一个可以复用的子查询&#xff0c;当然跟子查询还是有点区别的&#xff0c;CTE可以引用其他CTE&#xff0c;但子查询不能引用其它子查询。所以&#xff0c;开发中建议…...

Oracle dataguard 和Oracle rac的区别和联系

RAC服务器共用一套存储,同时提供服务,没有主备之分.宕一个其它的可以继续服务. 双机热备,共用一套存储,一个提供服务一个备份,主机宕了切换到备份服务器提供服务. data guard 完全两套系统,存储是单独的,用日志同步. RAC&#xff1a; 实例层冗余 DG &#xff1a;数据库层冗…...

JUC工具类-LockSupport概述

前言 ​ 多线程并发场景中&#xff0c;时常需要线程协同&#xff0c;故而需要对当前线程进行阻塞&#xff0c;并唤醒需要协同的线程来一起完成任务。 ​ 通常处理方式有三种&#xff1a; 1&#xff09;Synchronized加锁的线程 使用Object类下所提供的方法&#xff1a; wai…...

大数据:AI大模型对数据分析领域的颠覆(文末送书)

随着数字化时代的到来&#xff0c;大数据已经成为了各行各业中不可或缺的资源。然而&#xff0c;有效地分析和利用大数据仍然是一个挑战。在这个背景下&#xff0c;OpenAI推出的Code Interpreter正在对数据分析领域进行颠覆性的影响。 如何颠覆数据分析领域&#xff1f;带着这…...

CEdit 选中文字实时更新到另一个控件中

有时候&#xff0c;我们会遇到需求&#xff0c;软件中需要让选中一个CEdit控件中的文字实时更新到另一个控件中&#xff0c;实现效果如下所示&#xff1a; 代码如下&#xff1a; BOOL CEditDemoDlg::PreTranslateMessage(MSG* pMsg) { CEdit* pOldEdit (CEdit*)GetDlgIte…...

Word导出创建Adobe PDF其中emf图片公式马赛克化及文字缺失

软件版本 Word 2021 Visio 2019 Adobe Acrobat Pro 2020 问题描述 公式马赛克化&#xff0c;是指在Word中使用MathType编辑的公式&#xff0c;然后在Visio中使用图片(增强型图元文件)形式得到的粘贴对象&#xff0c;效果如下 文字缺失&#xff0c;是指Word导出→创建Adobe P…...

[matlab]matlab配置mingw64编译器

第一步&#xff1a;下载官方绿色版本mingw64编译器然后解压放到一个非中文空格路径下面 比如我mingw64-win是我随便改的文件名&#xff0c;然后添加环境变量&#xff0c;选择用户或者系统环境变量添加下面的变量 变量名&#xff1a; MW_MINGW64_LOC 变量值&#xff1a;自己的m…...

华为OD-非严格递增连续数字序列

题目描述 输入一个字符串仅包含大小写字母和数字 求字符串中包含的最长的非严格递增连续数字序列长度 比如&#xff1a; 12234属于非严格递增数字序列 输入描述 输入一个字符串仅包含大小写字母和数字 输出描述 输出字符串中包含的最长的非严格递增连续数字序列长度 示例…...

css滚动条样式这样修改下很漂亮

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>滚动条样式修改下很漂亮(不支持IE)</title> <style type"text/css"> * { margin: 0; padding: 0; } .box { width: 300px; height: 100px; margin…...

转置卷积的应用

目录 矩阵转置 一、转置卷积的背景 二、转置卷积的应用 三、转置卷积的区别 卷积 矩阵转置 矩阵的转置在信息处理中起到了重要的作用。在计算机科学领域&#xff0c;矩阵常用于表示图像、音频和视频等多媒体数据。当我们需要对这些数据进行处理时&#xff0c;常常需要进行…...

常见的移动端布局

流式布局&#xff08;百分比布局&#xff09; 使用百分比、相对单位&#xff08;如 em、rem&#xff09;等来设置元素的宽度&#xff0c;使页面元素根据视口大小的变化进行调整。这种方法可以实现基本的自适应效果&#xff0c;但可能在不同设备上显示不一致。 <!DOCTYPE ht…...

Typore 亲测有效(懂得都懂哈)

Typore 亲测从安装到使用&#xff0c;可以使用&#xff08;具体是什么懂得都懂哈&#xff09; 网盘下载地址:链接&#xff1a;https://pan.baidu.com/s/1w0UiS1szxnO9Lxz6sbXEKg?pwdqwe1 提取码&#xff1a;qwe1 第一步&#xff1a; 下载压缩包进行解压&#xff0c;解压过…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

Windows安装Miniconda

一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...

项目进度管理软件是什么?项目进度管理软件有哪些核心功能?

无论是建筑施工、软件开发&#xff0c;还是市场营销活动&#xff0c;项目往往涉及多个团队、大量资源和严格的时间表。如果没有一个系统化的工具来跟踪和管理这些元素&#xff0c;项目很容易陷入混乱&#xff0c;导致进度延误、成本超支&#xff0c;甚至失败。 项目进度管理软…...