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

news2024/9/28 23:24:55

目录

索引操作

创建索引

主键索引

介绍

在创建表时设置主键

创建表后添加主键

唯一键索引

介绍

在创建表时设置唯一键

创建表后添加唯一键

普通索引

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

创建表后添加普通索引

自主命名索引

索引创建原则

哪些列适合创建索引

不适合作为索引的列

查询索引

介绍

查看方式 

主键索引

​编辑

唯一键索引

普通索引

删除索引

主键索引

其他索引

复合索引

介绍

查看索引

作用

索引覆盖

索引最左匹配原则 


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.coloradmin.cn/o/2171127.html

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

相关文章

猫头虎带你解决:error Error: certificate has expired

🐯猫头虎带你解决:error Error: certificate has expired 💥 今天有粉丝问猫哥:“🐯猫头虎,我在 Node.js 项目中使用 Yarn 安装包时遇到了一个错误:Error: certificate has expired。你能帮忙解…

【机器学习(十二)】机器学习回归案例之二手汽车价格预测—XGBoost回归算法—Sentosa_DSML社区版

文章目录 一、算法和背景介绍二、Python代码和Sentosa_DSML社区版算法实现对比(一) 数据读入与统计分析(二) 数据处理(三) 特征选择与相关性分析(四) 样本分区与模型训练(五) 模型评估和模型可视化 三、总结 一、算法和背景介绍 关于XGBoost的算法原理,已经进行了介…

[C++]栈队列改成模板类

栈、队列都更改成模板类 栈 .hpp #ifndef MY_STACK_H #define MY_STACK_H #include <iostream>using namespace std;template<typename T> class my_stack { private:T *base;//动态栈指针int top;//栈顶元素int size;//栈大小 public:my_stack();//无参构造my_…

宠物空气净化器有必要买吗?希喂、霍尼韦尔和352哪款更推荐?

国庆假终于要来了&#xff0c;对于我这个上班族而言&#xff0c;除了春节假期最期待的就是这个国庆假&#xff0c;毕竟假期这么长&#xff0c;家里还有一只小猫咪&#xff0c;一直都没时间陪它&#xff0c;终于给我找到时间带它会老家玩一趟了。 我跟我妈说的时候&#xff0c;…

Apache OFBiz SSRF漏洞CVE-2024-45507分析

Apache OFBiz介绍 Apache OFBiz 是一个功能丰富的开源电子商务平台&#xff0c;包含完整的商业解决方案&#xff0c;适用于多种行业。它提供了一套全面的服务&#xff0c;包括客户关系管理&#xff08;CRM&#xff09;、企业资源规划&#xff08;ERP&#xff09;、订单管理、产…

Vulhub TheEther_1.0.1靶机详解

项目地址 https://download.vulnhub.com/theether/theEther_1.0.1.zip实验过程 将下载好的靶机导入到VMware中&#xff0c;设置网络模式为NAT模式&#xff0c;然后开启靶机虚拟机 使用nmap进行主机发现&#xff0c;获取靶机IP地址 nmap 192.168.47.1-254根据对比可知theEthe…

【 EXCEL 数据处理 】000003 案列 标记涨跌,保姆级教程。使用的软件是微软的Excel操作的。处理数据的目的是让数据更直观的显示出来,方便查看。

【 EXCEL 数据处理 】000003 案列 使用条件格式之大于和小于&#xff0c;标记涨跌&#xff0c;保姆级教程。使用的软件是微软的Excel操作的。处理数据的目的是让数据更直观的显示出来&#xff0c;方便查看。 &#x1f4da;一、直接上案例 &#x1f4d6;1.使用条件格式之大于和小…

CMU 10423 Generative AI:lec7、8、9(专题2:一张图理解diffusion model结构、代码实现和效果)

本文介绍diffusion model是什么&#xff08;包括&#xff1a;模型详细的架构图、各模块原理和输入输出、训练算法解读、推理算法解读&#xff09;、以及全套demo代码和效果。至于为什么要这么设计、以及公式背后的数学原理&#xff0c;过程推导很长很长&#xff0c;可见参考资料…

Bug:ThreadPoolTaskScheduler搭配CronTask完成定时任务,关闭scheduler后CronTask任务仍然执行?

【问题】执行下面代码后&#xff0c;关闭ThreadPoolTaskScheduler&#xff0c;CronTask仍然继续执行。 Configuration public class config {Beanpublic String getString() throws InterruptedException {Runnable runnable () -> {try {System.out.println("hello r…

动态规划算法:13.简单多状态 dp 问题_打家劫舍II_C++

目录 题目链接&#xff1a;LCR 090. 打家劫舍 II - 力扣&#xff08;LeetCode&#xff09; 一、题目解析 题目&#xff1a; 解析&#xff1a; 二、算法原理 1、状态表示 2、状态转移方程 状态转移方程推理&#xff1a; 1、i位置状态分析 2、首尾状态分析 3、初始化 d…

Meta震撼发布Llama3.2大规模模型

在2024.9.26的年Meta Connect大会上&#xff0c;Meta正式推出了Llama3.2模型&#xff0c;旨在提升边缘AI和视觉任务的能力。Llama3.2系列包括11亿和90亿参数的中型视觉模型&#xff0c;以及为移动设备优化的1亿和3亿参数的小型模型&#xff0c;并针对高通和联发科的硬件平台进行…

Webpack 介绍

Webpack 介绍 Date: August 29, 2024 全文概要 Webpack概念&#xff1a; Webpack是一个静态的模块化的打包工具&#xff0c;可以为现代的 JavaSript 应用程序进行打包。 1-静态&#xff1a;Webpack可以将代码打包成最终的静态资源 2-模块化&#xff1a;webpack支持各种模块…

教师工作量评估与管理软件

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

Spring异常处理-@ExceptionHandler-@ControllerAdvice-全局异常处理

文章目录 ResponseBodyControllerAdvice最终的异常处理方式 异常的处理分两类 编程式处理&#xff1a;也就是我们的try-catch 声明式处理&#xff1a;使用注解处理 ResponseBody /*** 测试声明式异常处理*/ RestController public class HelloController {//编程式的异常处理&a…

EasyAR自定义相机RTSP视频流(CustomCamera)

EasyAR可以使用视频源作为输入源&#xff0c;官方给出了示例和文档&#xff0c;但是对于大部分Unity开发人员来说看了文档还是一头雾水。 在Android Studio中将custom-camera.jar添加libs中&#xff0c;就可以查看源代码了 分析其源代码&#xff0c;主要是ExternalCameraSampl…

【linux 多进程并发】linux下使用常见命令,来解析进程家族体系脉络

0101 Linux进程 ​专栏内容&#xff1a; postgresql使用入门基础手写数据库toadb并发编程 个人主页&#xff1a;我的主页 管理社区&#xff1a;开源数据库 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物. 文章目录 0101 Li…

ASP.NET Core 打包net8.0框架在Linux CentOS7上部署问题

问题1 libstdc.so.6版本过低。 CentOS7默认安装的gcc版本太低&#xff0c;达不到.net8的启动条件。 /lib64/libstdc.so.6: version GLIBCXX_3.4.20’ not found (required by ./IDT_net) /lib64/libstdc.so.6: version GLIBCXX_3.4.21’ not found (required by ./IDT_net) 解…

恢复丢失的数据:恢复数据库网络解决方案

探索恢复数据库网络的深度对于了解现代企业如何防御其数据不断增长的威胁至关重要。在一个时代&#xff0c;数字证据和取证网络安全在法律和商业领域扮演关键角色&#xff0c;这些网络提供的弹性是不可或缺的。深入研究恢复数据库网络的重要性不仅仅是数据保护&#xff0c;它还…

ubuntu安装mysql 8,mysql密码的修改

目录 1.安装mysql 82.查看当前状态3.手动给数据库设置密码mysql5mysql8 4.直接把数据库验证密码的功能关闭掉 1.安装mysql 8 apt install mysql-server-8.0敲 Y 按回车 table 选ok 2.查看当前状态 service mysql status显示active&#xff08;running&#xff09;证明安装成…

媒界:吉利星瑞百炼成钢,持续引领中国汽车价值向上

秋风送爽绘秋色&#xff0c;出行良辰恰逢时。9月28日至9月29日&#xff0c;2024安行中国汽车安全科技公益巡展迎来尾声&#xff0c;安行中国携手吉利汽车&#xff0c;步履轻盈地踏入苏州星湖天街&#xff0c;共同呈献一场融合环保科技前沿、安全驾驶理念与深厚文化底蕴的48小时…