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

Mysql索引原理

文章目录

  • 一、Mysql索引原理
    • 1.1 mysql记录存储结构
    • 1.2 主键索引
    • 1.3 普通索引
    • 1.4 联合索引

一、Mysql索引原理

1.1 mysql记录存储结构

  1. mysql默认使用innodb存储引擎存储数据。以页为最小单位存取数据,页的大小为16KB
  2. 往mysql表中插入记录时:一个页中存放多条记录,记录按照主键索引从小到大进行排序,以单向链表的方式连接。
  3. 一个页中会存在多条记录,为了快速查找(摆脱遍历),将记录分组,然后将各组信息放在槽里,这样在槽内使用二分查找就可以快速查到找指定记录
  4. 当有多条记录,一个页不够用时就申请新的页,各个页之间使用双向链表连接。再使用一个页目录页记录各个页信息,从而可以通过页目录页快速查找到记录所在页。
  5. 最终形成一个B+树。叶子节点上都包含完整的数据,即索引即数据数据即索引。

1.2 主键索引

推荐使用自增id作为主键索引,这样就可以避免页内数据的重新排序。
如果表没有指定主键,mysql会自动选取一个unique列作为主键;如果unique项也没有,mysql会自动生成一个数据作为主键,对用户是不显示的。
通过主键索引来查找记录,使用的是B+树,速度非常快

1.3 普通索引

假设一个表已经使用一个自增id作为主键,当我们要查询neme=‘药水哥’时,就只能遍历所有叶子节点,这就非常低效了。所以可以建立一个叶子节点只含name–主键数据的页,页内数据按照name字段排序。然后形成了一棵B+树,这就是普通索引。通过name快速查找到对应的主键,然后通过主键查找记录,这个过程也叫作回表。如果有多个相同的name值那么就需要多次回表。

1.4 联合索引

create index idx_name_phone on test_table (name, phone);

页内数据还是按照name排序的,name相同则根据phone排序。

select * from test_table where name=‘xwp’ and phone=‘13312335656’;

假设只使用上面的普通索引,同时有10个人都叫xwp,那么就需要回表10次,使用联合索引之后就不需要回表了。

相关文章:

Mysql索引原理

文章目录 一、Mysql索引原理1.1 mysql记录存储结构1.2 主键索引1.3 普通索引1.4 联合索引 一、Mysql索引原理 1.1 mysql记录存储结构 mysql默认使用innodb存储引擎存储数据。以页为最小单位存取数据,页的大小为16KB往mysql表中插入记录时:一个页中存放…...

apifox的使用以及和idea集成

apifox 简介 Apifox 是 API 文档、API 调试、API Mock、API 自动化测试一体化协作平台,定位 Postman Swagger Mock JMeter,由此可见apifox集功能于一身,极大的提升了我们开发的效率,不用再为postman网络连接失败而发愁&…...

css:过渡transition 、转换transform、动画animation

一、过渡效果:transition 属性 transition 属性是CSS3中用来实现元素过渡效果的属性之一。它定义了元素在不同状态之间平滑过渡的效果,让元素的改变更加流畅和动态。 transition 属性包括以下几个子属性: transition-property:指…...

双边滤波算法及例程

双边滤波算法是一种非线性滤波技术,用于平滑图像并保留边缘细节。它在计算像素的平均值时考虑了两个因素:1)空间域的距离和2)灰度值之间的差异。 算法步骤如下: 定义一个窗口,包含待处理像素及其周围邻域…...

排序算法-希尔排序法(ShellSort)

排序算法-希尔排序法(ShellSort) 1、说明 我们知道当原始记录的键值大部分已排好序的情况下插入排序法非常有效,因为它不需要执行太多的数据搬移操作。希尔排序法是D.L.Shell在1959年7月发明的一种排序法,可以减少插入排序法中数…...

交通物流模型 | 基于自适应图卷积网络的轨道交通短时客流预测

随着城市化进程的发展和加快,城市轨道交通系统逐渐成长为一个大型网络,站点间的拓扑结构也变得越来越复杂,使得空间依赖性的捕捉变得越来越困难。多条线路的纵横交错使得站点间呈拓扑分布,传统的图卷积网络是基于先验知识生成的邻接矩阵实现的,无法反映站点之间的实际空间…...

2.1python 常用的三种数据类型_python量化实用版教程(初级)

python 常用的三种数据类型 在 Python 编程中,最常用的三种数据类型是字符串(str)、整数(int)和浮点数(float)。这些数据类型在编写程序时非常重要,因为它们允许我们存储和操作不同…...

C++游戏后端开发(魔兽世界,MMO,TrinityCore源码拆解) 教程

基于魔兽开源后端框架 TrinityCore 的技术拆解课程 一、TrinityCore CMake项目构建 1.1 CMake的使用 什么是CMake , CMake 的工作流程 CMakeLists.txt的编写规则 静态库生成以及链接 动态库生成以及链接 嵌套CMake 1.2 Windows和Linux下编 译调试环境搭建 cmake和grap…...

MySQL 之 死锁日志的查看和分析

MySQL死锁日志的查看和分析 查看死锁日志,优化sql和索引,加速数据库数据操作...

Docker运行docker中指定一个jar

目标: 在正在运行的一个docker容器中,容器的名字为 testimg,运行我们容器文件中我们放的一个jar包。例如:xiaobai.jar,并且在群晖的定时任务中,每分钟运行一次。 解决问题方案: 在群晖定时任务中运行指定…...

nodejs+vue家教管理系统

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1nodejs简介 4 2.2 express框架介绍 6 2.3 B/S结构 4 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性…...

vuex入门

文章目录 一、vuex简介1.1 概述1.2 核心 二、使用2.1 安装2.2 创建store模块2.3 在src/store/index.js中写入内容2.4.在src/main.js中导入并使用store实例2.5.在views新建vuex目录,添加Page1.vue和Page2.vue文件2.6.配置路由2.7.在LeftNav.vue添加内容 三、存取值3.1 state直接…...

交叉熵Loss多分类问题实战(手写数字)

1、import所需要的torch库和包 2、加载mnist手写数字数据集,划分训练集和测试集,转化数据格式,batch_size设置为200 3、定义三层线性网络参数w,b,设置求导信息 4、初始化参数,这一步比较关键,…...

如何看待Unity新的收费模式?(InsCode AI 创作助手)

Unity引擎是目前全球最受欢迎的3D游戏和应用开发引擎之一,按照Unity公司自己的说法,全球1000款畅销移动游戏中70%以上都使用了Unity引擎。如果统计全平台(包括PC、主机和移动设备)的情况,非官方数据是,超过…...

Android Studio git 取消本地 commit(未Push)

操作比较简单 1.选中项目然后依次选择:Git->Repository->Reset HEAD 2.然后再to Commit中输入HEAD^,表示退回到上一个版本。...

ViewModifier/视图修饰符, ButtonStyle/按钮样式 的使用

1. ViewModifier 视图修饰符 1.1 创建默认按钮视图修饰符 ViewModifierBootcamp.swift import SwiftUI/// 默认按钮修饰符 struct DefaultButtonViewModifier: ViewModifier{let bcakgroundColor: Colorfunc body(content: Content) -> some View {content.foregroundColor…...

科技资讯|微软AR眼镜新专利曝光,可拆卸电池解决续航焦虑

微软正在深入研究增强现实(AR)领域,最近申请了一项“热插拔电池”相关专利。该专利于 2023 年 10 月 5 日发布,描述了采用模块化设计的 AR 眼镜,热插拔电池放置在了镜腿部分,可以直接拿下替换,对…...

idea系列---【上一次打开springboot项目还好好的,现在打开突然无法启动了】

问题 昨天走的时候项目还能正常启动,今天来了之后突然报下面的错误: Error:Kotlin: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.7.1, expected version is 1.1.16. 解决方案 点击 idea: Bui…...

查询资源消耗

import subprocess def get_cpu_usage(pid, duration): output subprocess.check_output([‘pidstat’, ‘-d’, ‘-p’, str(pid), ‘1’, str(duration)]).decode(‘utf-8’) lines output.strip().split(’\n’) cpu_usage [] for line in lines[4:]: fields line.spli…...

conda: error: argument COMMAND: invalid choice: ‘activate‘

参考:https://github.com/conda/conda/issues/13022 输入后重启terminal即可...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...

django blank 与 null的区别

1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是&#xff0c;要注意以下几点&#xff1a; Django的表单验证与null无关&#xff1a;null参数控制的是数据库层面字段是否可以为NULL&#xff0c;而blank参数控制的是Django表单验证时字…...