详解MySql索引

目录

一 、概念

二、使用场景 

三、索引使用 

四、索引存在问题

五、命中索引问题

六、索引执行原理 


一 、概念

索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。暂时可以理解成C语言的指针,文章后面详解

二、使用场景 

  • 数据量较大,且经常对这些列进行条件查询。
  • 该数据库表的插入操作,及对这些列的修改操作频率较低。
  • 索引会占用额外的磁盘空间。

三、索引使用 

创建主键约束( PRIMARY KEY )、唯一约束( UNIQUE )、外键约束( FOREIGN KEY )时,会自动创建 对应列的索引。
  • 查看索引
show index from 表名;
  • 创建索引
create index 索引名 on 表名(字段名);
  • 删除索引
drop index 索引名 on 表名;

四、索引存在问题

  • 索引也会占用一些内存,在表数据量越大越明显
  • 索引是可以提高查询速度(前提是要命中索引,后面有解释命中索引),但是可能会拖慢增删改速度。
  • 后续如果对数据进行了增删改都要同步索引。

五、命中索引问题

索引命中规则详解:
 
t这张表 a,b,c 三个字段组成组合索引
 
select * from t where a=? and b=? and c=?  全命中
 
select * from t where c=? and b=? and a=?  全命中 解析MySQL的查询优化器会自动调整where子句的条件顺序以使用适合的索引
 
select * from t where a=?  命中a  解析:最左前缀匹配
 
select * from t where a=? and b=?  命中a和b  解析:最左前缀匹配
 
select * from t where a=? or b=?  一个没命中 解析or无法命中
 
select * from t where a=? and c=?  命中a 解析:最左前缀匹配,中间没有则无法使用索引
 
select * from t where a=? and b in ( x, y, z) and c=?  全部命中 in精确匹配可以使用索引
 
select * from t where b=?  一个没命中  解析:最左前缀匹配原则
 
select * from t where b=? and c=?  一个没命中  解析:最左前缀匹配原则
 
select * from t where a=? and b like 'xxx%'   命中a和b
 
select * from t where a=? and b like '%xxx'  命中a
 
select * from t where a<? and b=?   命中a 解析这个是范围查找
 
select * from t where a between ? and ?  and b=?  命中a和b 解析BETWEEN相当于in操作是精确匹配
 
select * from t where a between ? and ?  and b=? and c  and between ? and ?    全部命解析中同上
 
select * from where a-1=?   函数和表达式无法命中索引

 

六、索引执行原理 

准备测试表

-- 创建用户表
DROP TABLE IF EXISTS test_user;
CREATE TABLE test_user (
 id_number INT,
 name VARCHAR(20) comment '姓名'
,
 age INT comment '年龄'
,
 create_time timestamp comment '创建日期'
);

不加索引情况,要是查询大量数据可能死机 :

select * from test_user where id_number=556677;

为提供查询速度,创建 id_number 字段的索引:

create index idx_test_user_id_number on test_user(id_number);

换一个身份证号查询,并比较执行时间:

select * from test_user where id_number=776655;

注意我们可以看到我们如果查询的是主键,那么索引的值就是我们想要找到的值,如果我们想要获取非主键的值,我们必须根据找到的主键id去原来表中找到非主键,这种操作叫做回表 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【图像分割】使用Otsu 算法及迭代计算最佳全局阈值估计并实现图像分割(代码实现与分析)

本实验要求理解全局阈值分割的概念&#xff0c;并实现文本图像分割。需要大家深入理解Ostu 算法的实现过程及其迭代原理&#xff0c;同时通过学习使用Otsu 算法及其迭代&#xff0c;实践图像分割技术在文本图像处理中的应用。 以下将从实验原理、实验实现、实验结果分析三部分对…

老阳视频号带货项目,究竟是一个怎样的选择呢?

近年来&#xff0c;随着网络技术的飞速发展&#xff0c;直播带货已经成为电商行业的新宠。其中&#xff0c;网红老阳以其独特的风格和专业度&#xff0c;成功吸引了大量粉丝的关注&#xff0c;并带动了一波视频号带货的热潮。那么&#xff0c;现在跟随老阳的步伐&#xff0c;投…

sqllab第二十七A关通关笔记

知识点&#xff1a; 双引号闭合union select 大小写绕过 Union Select这里不能进行错误注入&#xff0c;无回显 经过测试发现这是一个双引号闭合 构造payload:id1"%09and%091"1 页面成功回显 构造payload:id0"%09uNion%09SElect%091,2,3%09"1 页面成功…

AI论文速读 | TPLLM:基于预训练语言模型的交通预测框架

论文标题&#xff1a;TPLLM: A Traffic Prediction Framework Based on Pretrained Large Language Models 作者&#xff1a;Yilong Ren&#xff08;任毅龙&#xff09;, Yue Chen, Shuai Liu, Boyue Wang&#xff08;王博岳&#xff09;,Haiyang Yu&#xff08;于海洋&#x…

Mysql 索引、锁与MVCC等相关知识点

文章目录 Mysql锁的类型锁使用MVCC快照读和当前读读视图【Read View】串行化的解决 索引类型存储方式区分逻辑区分实际使用区分索引失效情况 索引建立规范SQL编写规范exlpain字段解析ACID的原理日志引擎慢SQL整合SpringBoot博客记录 Mysql锁的类型 MySQL中有哪些锁&#xff1a…

2024-3-13,14(CSS)

1.复合选择器 有两个或者多个基础选择器&#xff0c;通过不同的方式组合而成。 目的是更加准确高效的选择目标元素&#xff08;标签&#xff09; 分类&#xff1a; 后代选择器&#xff1a;选中某个元素的所有后代元素 写法&#xff1a;父选择器 子选择器 {CSS属性}&#x…

软考高级:软件工程单元测试(驱动模块、被测模块、桩模块)概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

爱奇艺 CTR 场景下的 GPU 推理性能优化

01 背景介绍 GPU 目前大量应用在了爱奇艺深度学习平台上。GPU 拥有成百上千个处理核心&#xff0c;能够并行的执行大量指令&#xff0c;非常适合用来做深度学习相关的计算。在 CV&#xff08;计算机视觉&#xff09;&#xff0c;NLP&#xff08;自然语言处理&#xff09;的模型…

Spring炼气之路(炼气一层)

目录 一、IOC 1.1 控制反转是什么&#xff1f; 1.2 什么是IOC容器&#xff1f; 1.3 IOC容器的作用 1.4 IOC容器存放的是什么&#xff1f; 二、DI 2.1 依赖注入是什么&#xff1f; 2.2 依赖注入的作用 三、IOC案例实现 3.1下载Maven 3.2 配置Maven中的settings.xml文…

考研C语言复习进阶(2)

目录 1. 字符指针 2. 指针数组 3. 数组指针 3.1 数组指针的定义 3.2 &数组名VS数组名 4. 函数指针 5. 函数指针数组 6. 指向函数指针数组的指针 7. 回调函数 8.三步辗转法 9. 指针和数组笔试题解析 10. 指针笔试题 指针的主题&#xff0c;我们在初级阶段的《指…

​​SQLiteC/C++接口详细介绍之sqlite3类(十一)

返回目录&#xff1a;SQLite—免费开源数据库系列文章目录 上一篇&#xff1a;​​SQLiteC/C接口详细介绍之sqlite3类&#xff08;十&#xff09; 下一篇&#xff1a;​​SQLiteC/C接口详细介绍之sqlite3类&#xff08;十二&#xff09;&#xff08;未发表&#xff09; 33.sq…

JavaWeb07-会话

目录 一、会话跟踪技术 1.概述 2.实现方式 3.Cookie &#xff08;1&#xff09;基本使用 &#xff08;2&#xff09;原理 &#xff08;3&#xff09;存活时间 &#xff08;4&#xff09;存储中文 4.Session &#xff08;1&#xff09;基本使用 &#xff08;2&#x…

C#,图论与图算法,寻找图(Graph)中的桥(Bridge)算法与源代码

1 图(Graph)中的桥(Bridge) 如果删除无向连通图中的边会断开该图的连接,则该边就是桥。对于断开连接的无向图,定义类似,桥接是一种边移除,它增加了断开连接的组件的数量。 与连接点一样,网桥代表连接网络中的漏洞,对于设计可靠的网络非常有用。例如,在有线计算机网…

哪些视频编辑软件最好用?会声会影怎么样?2024会声会影激活

随着数字化时代的到来&#xff0c;视频编辑软件的需求量也逐渐增加。为了满足用户的需求&#xff0c;市面上涌现了很多的视频编辑软件&#xff0c;让用户不知道该如何选择。今天我们来聊聊哪些视频编辑软件最好用&#xff0c;以及会声会影怎么样&#xff1f; 视频编辑软件的选…

分布式事务基础理论解析

一、概述 1.1 定义 为了解决java 多个节点之间数据一致性问题。产生的核心原因是&#xff1a;资源存储的分布性。比如多个数据库&#xff0c;或者Mysql和Redis的数据一致性等。 1.2 产生场景 跨JVM进程产生分布式事务。即服务A和服务B分别有对应的数据库跨数据库实例产生分…

Qt QTableWidget 实现行选中及行悬浮高亮

表格整行的 selected、hover 高亮需求很常见&#xff0c;但使用 Qt 提供的开箱即用的方法根本无法实现这个需求&#xff08;至少在当前的时间节点是不行的&#xff09;&#xff1b;想要实现这个效果必须要费一点点力气&#xff0c;我们尽量选择较为简单的方法。 话不多说&…

yolo项目中如何训练自己的数据集

1.收集自己需要标注的图片 2.打开网站在线标注网站 2.1 点击右下角Get Start 2.2点击这里上传自己的图片 上传成功后有英文的显示 点击左边的Object Detection&#xff0c;表示用于目标检测 2.3选择新建标签还是从本地加载标签 如果是本地加载标签&#xff08;左边&#…

Linux/Ubuntu/Debian从控制台启动程序隐藏终端窗口

如果你想从终端运行应用程序但隐藏终端窗口. 你可以这样做&#xff1a; 在后台运行&#xff1a; 你只需在命令末尾添加一个与号 (&) 即可在后台运行它。 例如&#xff1a; your_command &将 your_command 替换为你要运行的命令。 这将在后台启动该命令&#xff0c…

科研绘图二:箱线图(抖动散点)

R语言绘图系列—箱线图抖动散点 &#xff08;二&#xff09;: 科研绘图一&#xff1a;箱线图&#xff08;抖动散点&#xff09; 文章目录 R语言绘图系列---箱线图抖动散点&#xff08;二&#xff09;: 科研绘图一&#xff1a;箱线图&#xff08;抖动散点&#xff09; 前言一、…

中兴交换机与H3C交换机配置链路聚合802.3ad

难得见到一回中兴交换机 中兴交换机型号&#xff1a; ZX8902 这台中兴要与H3C交换机建立port-channel&#xff0c; 接口为access vlan 100 拓扑如下&#xff1a; 1 中兴交换机配置 1.1 创建 smart group&#xff0c;对&#xff0c;没有看错&#xff0c;中兴的port-channel叫…