mysql索引结构操作(主键/唯一键/普通索引的创建/查询/删除),复合索引介绍(索引覆盖,索引最左匹配原则)

目录

索引操作

创建索引

主键索引

介绍

在创建表时设置主键

创建表后添加主键

唯一键索引

介绍

在创建表时设置唯一键

创建表后添加唯一键

普通索引

在创建表时指定某列为索引

创建表后添加普通索引

自主命名索引

索引创建原则

哪些列适合创建索引

不适合作为索引的列

查询索引

介绍

查看方式 

主键索引

​编辑

唯一键索引

普通索引

删除索引

主键索引

其他索引

复合索引

介绍

查看索引

作用

索引覆盖

索引最左匹配原则 


mysql索引结构详细介绍 -- mysql索引 -- 索引的硬件理解(磁盘,磁盘与系统),软件理解(mysql,与系统io,buffer pool),索引结构介绍和理解(page内部,page之间,为什么是b+树)-CSDN博客

普通索引 -- mysql索引 -- 聚簇索引,非聚簇索引,如何查看linux下的数据库文件,普通/辅助索引(回表查询)-CSDN博客

索引操作

创建索引

主键索引

介绍

主键索引的效率最高,因为主键不能重复,所以搜索效率最高

  • 只要设置主键,mysql会自动创建主键索引

因为一个表只有一个主键

  • 所以相应地,只会有一个主键索引

索引默认名称为PRIMARY

在创建表时设置主键
create table 表名(id int primary key,name varchar(30)
);create table 表名(id int, name varchar(30), primary key(id)
);
创建表后添加主键
alter table 表名 add primary key(列名);

唯一键索引

介绍

当我们为表添加唯一键约束时,也会自动创建出唯一键索引

在索引层面上,唯一键索引和普通索引没有任何差别

  • 创建时单拎出unique是为了照顾约束关系,只是在语法上想要强调一下唯一键
  • 在索引层面上唯一键索引和普通索引没有任何差别

因为可以有多个唯一键

  • 所以可以有多个唯一键索引
在创建表时设置唯一键

默认以列名作为索引名称

create table 表名(id int unique,name varchar(30)
);create table 表名(id int, name varchar(30), unique key(id)
);
创建表后添加唯一键

默认以列名作为索引名称

alter table 表名 add unique(列名);

普通索引

在创建表时指定某列为索引

默认以列名作为索引名称

create table 表名(id int, name varchar(30), index(id)
);
创建表后添加普通索引

默认以列名作为索引名称

alter table 表名 add index(列名);
自主命名索引
create index 索引名 on 表名(列名);

索引创建原则

哪些列适合创建索引

频繁作为查询条件

  • 当然,设置了主键和唯一键的列不需要创建索引,因为一旦设置约束条件,就自动创建索引结构

条件不止这些,可以通过下面的"不适合"来反推哪些列适合

不适合作为索引的列

唯一性太差的

  • 比如性别,总共就那么几种,没必要创建索引
  • 提高不了效率,反而增加负担

更新特别频繁的

  • 比如,登录状态
  • 索引就是方便我们去查询,数据老是改来改去的,结构也要跟着变(因为key值变了)

不会出现在where子句中的

  • 根本不会用它作为筛选条件的,也就没有必要创建索引

如何证明我们创建了索引?

查询索引

介绍

Key_name:

  • 主键索引的名字
  • 默认名称是PRIMARY

Column_name:

  • 指以哪一列来构建索引

Index_type:

  • 构建索引的方式
  • BTREE就是b+树

查看方式 

show index/keys from 表名(\G);desc 表名;

主键索引

可以看到,索引名称就是主键索引的默认名

唯一键索引

因为我们没有指定索引名,所以默认以列名为索引名

普通索引

  • 默认名依然是列名

如果设置了索引名:

 

  • 这样就能看到Key_name和Column_name的区别了

删除索引

主键索引

alter table 表名 drop primary key;

因为一张表中主键只有一个,所以不需要带索引名

其他索引

alter table 表名 drop index 索引名;drop index 索引名 on 表名;

复合索引

介绍

以多列作为索引,用于加速对多个列的查询

语法 -- alter table 表名 add index(列名1,列名2...)

查看索引

查看索引时会发现增加了两个索引

  • 两个索引的Key_name,只是Column_name不同
  • 说明b+树结构只新增了一个,会以列名1充当索引名
  • 队列组合起来充当key值  -- 查询的时候,必须所有列数据都匹配,才能继续往下走

作用

索引覆盖

因为innodb的普通索引在索引结构中存放的是[数据的key值]

  • 如果我们以两列作为key值,之后我们如果想要高频地用某行[列1数据]查找[对应的列2数据]时,就可以很快地找到
  • 因为本身列2数据就在key值中(也就是在这颗新建的b+树中),就不用再回表了
  • 一旦列1数据匹配,自然就可以拿到列2数据了

以上被称为索引覆盖

  • 覆盖的是主键索引,因为不需要再回到主键索引中查找了

索引最左匹配原则 

mysql在索引匹配时,是并且必须是从最左侧开始的

  • 意思是 -- 如果查询条件跳过了最左边的列,索引将无法被利用

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

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

相关文章

【Linux:共享内存】

共享内存的概念: 操作系统通过页表将共享内存的起始虚拟地址映射到当前进程的地址空间中共享内存是由需要通信的双方进程之一来创建但该资源并不属于创建它的进程,而属于操作系统 共享内存可以在系统中存在多份,供不同个数,不同进…

14 vue3之内置组件trastion全系列

前置知识 Vue 提供了 transition 的封装组件,在下列情形中,可以给任何元素和组件添加进入/离开过渡: 条件渲染 (使用 v-if)条件展示 (使用 v-show)动态组件组件根节点 自定义 transition 过度效果,你需要对transition组件的name属性自定义。…

基于BeagleBone Black的网页LED控制功能(flask+gpiod)

目录 项目介绍硬件介绍项目设计开发环境功能实现控制LED外设构建Webserver 功能展示项目总结 👉 【Funpack3-5】基于BeagleBone Black的网页LED控制功能 👉 Github: EmbeddedCamerata/BBB_led_flask_web_control 项目介绍 基于 BeagleBoard Black 开发板…

ChatGPT 推出“Auto”自动模式:智能匹配你的需求

OpenAI 最近为 ChatGPT 带来了一项新功能——“Auto”自动模式,这一更新让所有用户无论使用哪种设备都能享受到更加个性化的体验。简单来说,当你选择 Auto 模式后,ChatGPT 会根据你输入的提示词复杂程度,自动为你挑选最适合的AI模…

DataGrip远程连接Hive

学会用datagrip远程操作hive 连接前提条件: 注意:mysql是否是开启状态 启动hadoop集群 start-all.sh 1、启动hiveserver2服务 nohup hiveserver2 >> /usr/local/soft/hive-3.1.3/hiveserver2.log 2>&1 & 2、beeline连接 beelin…

缓存装饰器@cached_property

这个装饰器好像在好多包里都有,我在阅读源码的过程中,transformers.utils也有这个。查阅资料,大体上了解了它的用法。参考:[python]cached_property缓存装饰器 - faithfu - 博客园 这个装饰器用在类里面的某个方法前面&#xff0…

统信服务器操作系统【qcow2 镜像空间扩容】方案

使用 qcow2 镜像安装系统,当默认安装系统存储空间不够用时,进行自定义扩容 文章目录 准备环境扩容步骤一、检查环境信息1.查看镜像信息2.查看镜像分区信息3.确认需要扩容的分区名二、扩容1.备份镜像2.创建新的镜像文件,并指定空间3.将系统扩容到新的镜像三、扩容 lvm 分区四…

用5款AI帮你写论文,只需10分钟(附详细工具)

在当前的学术写作领域,AI技术的应用已经变得越来越普遍。借助这些工具,学生和研究人员可以显著提高写作效率,并在短时间内生成高质量的论文初稿。以下是五款值得推荐的AI论文写作工具,它们可以帮助你在10分钟内完成一篇论文&#…

【笔记】自动驾驶预测与决策规划_Part4_时空联合规划

文章目录 0. 前言1. 时空联合规划的基本概念1.1 时空分离方法1.2 时空联合方法 2.基于搜索的时空联合规划 (Hybrid A* )2.1 基于Hybrid A* 的时空联合规划建模2.2 构建三维时空联合地图2.3 基于Hybrid A*的时空节点扩展2.4 Hybrid A* :时空节…

Centos 7 搭建Samba

笔记: 环境:VMware Centos 7(网络请选择桥接模式,不要用NAT) 遇到一个问题就是yum 安装404,解决办法在下面(没有遇到可以无视这句话) # 安装Samba软件 yum -y install samba# 创建…

性能测试:性能测试计划

性能测试计划是在进行软件或系统的性能测试之前制定的详细计划和指导文件。它描述了所需性能测试的目标、范围、测试环境、资源需求、测试策略、测试用例、时间表等重要信息。 为什么要制定性能测试计划 制定性能测试计划的主要目的是确保性能测试的有效性和可靠性。以下是制…

THREE.JS法线Shader

以普通情况而论 vNormal normal;//...gl_FragColor vec4( vNormal, 1. );vNormal normal;//...gl_FragColor vec4( normalize( vNormal ) * 0.5 0.5, 1. );vNormal normalMatrix * normal;//...gl_FragColor vec4( normalize( vNormal ) * 0.5 0.5, 1. );normalMa…

【Android】布局优化—include,merge,ViewStub的使用方法

引言 1.重要性 在Android应用开发中,布局是用户界面的基础。一个高效的布局不仅能提升用户体验,还能显著改善应用的性能。随着应用功能的复杂性增加,布局的优化变得尤为重要。优化布局能够减少渲染时间,提高响应速度&#xff0c…

JavaWeb纯小白笔记02:Tomcat的使用:发布项目的三种方式、配置虚拟主机、配置用户名和密码

通过Tomcat进行发布项目的目的是为了提供项目的访问能力:Tomcat作为Web服务器,能够处理HTTP请求和响应,将项目的内容提供给用户进行访问和使用。 一.Tomcat发布项目的三种方式: 第一种:直接在Tomcat文件夹里的webapp…

K8s Calico替换为Cilium,以及安装Cilium过程(鲁莽版)

迁移CNI插件的3种办法: 1、创建一个新的集群,通过Gitops的方式迁移负载,然而,这可能涉及大量的准备工作和潜在的中断。 2、另一种方法是重新配置/etc/cni/net.d/指向Cilium。但是,现有的pod仍将由旧的…

Stable Diffusion 优秀博客转载

初版论文地址:https://arxiv.org/pdf/2112.10752 主要流程图: Latent Diffusion Models(LDMs) DDPM是"Denoising Diffusion Probabilistic Models"的缩写, 去噪扩散概率模型 博客: https://ja…

【十八】MySQL 8.0 新特性

MySQL 8.0 新特性 目录 MySQL 8.0 新特性 概述 简述 1、数据字典 2、原子数据定义语句 3、升级过程 4、会话重用 5、安全和账户管理 6、资源管理 7、表加密管理 8、InnoDB增强功能 9、字符集支持 10、增强JSON功能 11、数据类型的支持 12、查询的优化 13、公用…

【前端学习】iframe标签以及postMessage解决iframe中的跨域问题

面试中被问到跨域问题&#xff0c;并且面试官提出一个iframe嵌套页面中遇到跨域问题用纯前端解决跨域的方法。卡壳了~ 来学习一下~~ 一. iframe标签介绍 <iframe>是html的一个行内块级元素&#xff0c;像行内元素一样会在一行中水平排列&#xff0c;又可以像块元素一样设…

828华为云征文|在Flexus X实例上安装JDK和Tomcat保姆教学

目录 一、Flexus云服务器X实例 1.1 Flexus X实例概述 1.2 Flexus X实例场景优势 1.3 其他型号与Flexus X实例比较 二、Flexus X实例上安装JDK 2.1 确定安装版本 2.2 yum命令直接安装 2.3 查看版本 三、Flexus X实例上安装tomcat 3.1 上传安装包到Flexus X实例服务器 …

【Redis】持久化机制--RDB和AOF

目录 1. RDB持久化 1.1 触发机制 1.2 流程说明 1.3 RDB文件的处理 1.4 RDB机制演示 1.5 RDB的优缺点 2. AOF持久化 2.1 使用AOF与基本演示 2.2 AOF的工作流程 2.3 文件同步&#xff08;缓冲区刷新策略&#xff09; 2.4 重写机制 2.5 AOF重写流程 2.6 启动时数据恢复 …