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

MySQL【索引上】

在我们学习的过程中我们了解索引绝对是 MySQL 优化中最核心、最常用、也最容易被误解的知识点。很多人只知道“加索引能变快”但不知道为什么快、什么时候该加、加了又有什么代价。这篇文章就从磁盘原理、数据组织、索引结构、聚簇 / 非聚簇索引、索引操作五个维度介绍MYSQL的索引。一、没有索引数据库会有多慢案例先整一个海量表在查询的时候看看没有索引时有什么问题--构建一个8000000条记录的数据 --构建的海量表数据需要有差异性所以使用存储过程来创建 拷贝下面代码就可以了暂时不用理解 -- 产生随机字符串 delimiter $$ create function rand_string(n INT) returns varchar(255) begin declare chars_str varchar(100) default abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ; declare return_str varchar(255) default ; declare i int default 0; while i n do set return_str concat(return_str,substring(chars_str,floor(1rand()*52),1)); set i i 1; end while; return return_str; end $$ delimiter ; --产生随机数字 delimiter $$ create function rand_num() returns int(5) begin declare i int default 0; set i floor(10rand()*500); return i; end $$ delimiter ; --创建存储过程向雇员表添加海量数据 delimiter $$ create procedure insert_emp(in start int(10),in max_num int(10)) begin declare i int default 0; set autocommit 0; repeat set i i 1; insert into EMP values ((starti) ,rand_string(6),SALESMAN,0001,curdate(),2000,400,rand_num()); until i max_num end repeat; commit; end $$ delimiter ; -- 执行存储过程添加8000000条记录 call insert_emp(100001, 8000000);到此已经创建出了海量数据的表了。查询员工编号为998877的员工可以看到耗时4秒多这还是在本机一个人来操作在实际项目中如果放在公网中假如同时有1000个人并发查询那很可能就死机。解决方法创建索引测试看看查询时间无索引的本质问题必须全表扫描逐行匹配大量磁盘 IO速度极慢数据量越大慢得越离谱索引的作用不用扫全表快速定位数据大幅减少 IO 次数。二、认识磁盘2.1 MySQL与存储MySQL给用户提供存储服务而存储的都是数据数据在磁盘这个外设当中。磁盘是计算机中的一个机 械设备相比于计算机其他电子元件磁盘效率是比较低的在加上IO本身的特征可以知道如何提交效率是 MySQL的一个重要话题。先来研究一下磁盘在看看磁盘中一个盘片扇区 :1 . 数据库文件本质其实就是保存在磁盘的盘片当中。也就是上面的一个个小格子中就是我们经常所说的扇区。当然数据库文件很大也很多一定需要占据多个扇区。2. 题外话 从上图可以看出来在半径方向上距离圆心越近扇区越小距离圆心越远扇区越大那么所有扇区都是默认512字节吗目前是的我们也这样认为。因为保证一个扇区多大是由比特位密度决定的。不过最新的磁盘技术已经慢慢的让扇区大小不同了不过我们现在暂时不考虑。我们在使用Linux所看到的大部分目录或者文件其实就是保存在硬盘当中的。(当然有一些内存文件系统如 procsys之类我们不考虑)----数据库文件本质其实就是保存在磁盘的盘片当中就是一个一个的文件所以最基本的找到一个文件的全部本质就是在磁盘找到所有保存文件的扇区。而我们能够定位任何一个扇区那么便能找到所有扇区因为查找方式是一样的 。柱面(磁道):多盘磁盘每盘都是双面大小完全相等。那么同半径的磁道整体上便构成了一个柱面每个盘面都有一个磁头那么磁头和盘面的对应关系便是1对1的所以我们只需要知道磁头Heads、柱面(Cylinder)(等价于磁道)、扇区(Sector)对应的编号。即可在磁盘上定位所要访问的扇区。这种磁盘数据定位方式叫做 CHS。不过实际系统软件使用的并不是 CHS但是硬件是而是LBA一种线性地址可以想象成虚拟地址与物理地址。系统将 LBA地址最后会转化成为CHS交给磁盘去进行数据读取。不过我们现在不关心转化细节知道这个东西让我们逻辑自洽起来即可。结论我们现在已经能够在硬件层面定位任何一个基本数据块了(扇区)。那么在系统软件上就直接按照扇区 (512字节部分4096字节),进行IO交互吗不是如果操作系统直接使用硬件提供的数据大小进行交互那么系统的IO代码就和硬件强相关换言之如果硬件发生变化系统必须跟着变化从目前来看单次IO 512字节还是太小了。IO单位小意味着读取同样的数据内容需要进行多次磁盘访问会带来效率的降低。之前学习文件系统就是在磁盘的基本结构下建立的文件系统读取基本单位就不是扇区而是数据块。故系统读取磁盘是以块为单位的基本单位是4KB。2.2 磁盘随机访问(Random Access)与连续访问(Sequential Access)随机访问本次IO所给出的扇区地址和上次IO给出扇区地址不连续这样的话磁头在两次IO操作之间需要作比较大的移动动作才能重新开始读/写数据。连续访问如果当次IO给出的扇区地址与上次IO结束的扇区地址是连续的那磁头就能很快的开始这次IO操作这样的多个IO操作称为连续访问。因此尽管相邻的两次IO操作在同一时刻发出但如果它们的请求的扇区地址相差很大的话也只能称为随机访问而非连续访问。磁盘是通过机械运动进行寻址的连续访问不需要过多的定位故效率比较高。随机访问地址不连续 → 磁头频繁移动 → 慢连续访问地址连续 → 磁头几乎不动 → 快三、MySQL与磁盘的交互单位而MySQL作为一款应用软件可以想象成一种特殊的文件系统。它有着更高的IO场景所以为了提高基本的IO效率MySQL 进行IO的基本单位是 16KB(后面统一使用InnoDB存储引擎讲解)也就是说磁盘这个硬件设备的基本单位是512字节而 MySQL InnoDB引擎 使用 16KB 进行IO交互。即 MySQL 和磁盘进行数据交互的基本单位是 16KB 。这个基本数据单元在MySQL这里叫做page注意和系统的page区分不同层级的最小 IO 单位磁盘硬件512 字节操作系统4KBInnoDB16KBPage 页为什么 MySQL 要用 Page16KB核心原因减少 IO 次数。局部性原理一次访问的数据附近数据大概率也会被访问一次加载 16KB 到内存 Buffer Pool后续查询直接在内存完成不用再读磁盘IO 效率的核心矛盾不是每次读多少而是读多少次。四、建立共识五、索引的理解5.1 建立测试表插入多条记录查看插入结果向一个具有主键的表中乱序插入数据发现数据会自动排序。5.2 为何IO交互要是Page为何MySQL和磁盘进行IO交互的时候要采用Page的方案进行交互呢?用多少加载多少不香吗?如上面的5条记录如果MySQL要查找id2的记录第一次加载id1第二次加载id2一次一条记录那么就需要2次IO。如果要找id5那么就需要5次IO。但如果这5条(或者更多)都被保存在一个Page中(16KB能保存很多记录),那么第一次IO查找id2的时候整个Page会被加载到MySQL的Buffer Pool中这里完成了一次IO。但是往后如果在查找id1,3,4,5等完全不需要进行IO了而是直接在内存中进行了。所以就在单Page里面大大减少了IO的次数。你怎么保证用户一定下次找的数据就在这个Page里面我们不能严格保证但是有很大概率因为有局部性原理。往往IO效率低下的最主要矛盾不是IO单次数据量的大小而是IO的次数

相关文章:

MySQL【索引上】

在我们学习的过程中,我们了解,索引绝对是 MySQL 优化中最核心、最常用、也最容易被误解的知识点。很多人只知道 “加索引能变快”,但不知道为什么快、什么时候该加、加了又有什么代价。这篇文章就从磁盘原理、数据组织、索引结构、聚簇 / 非聚…...

vue-django flask+uniapp小程序宠物美容服务预约机构商城服务中心_2ahjj

目录技术栈选型与分工核心功能模块拆分数据模型设计要点接口交互规范关键实现难点测试部署方案迭代优化方向项目技术支持可定制开发之功能创新亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作技术栈选型与分工 后端框架选择 Django或Fl…...

《创业之路》-910-商业的黑幕、丑陋、利益、自私等是都商业原本的特性,是本能,正是因为这些特性,坦诚和诚信才显得尤为重要,方显反本能的重要性性。

商业的底色是“黑”,所以诚信才是唯一的“光”很多人对商业世界有一种天真的误解,认为商业的本质是“双赢”和“美好”。 但如果你剥开那些精美的PPT、宏大的愿景和温情的品牌故事,直视商业的原初代码,你会发现:贪婪、…...

【数据结构】详解双向链表

目录 一,链表的分类 二,双向链表 1,双向链表的结构 2,双向链表的创建及功能实现 三,顺序表和双向链表的优缺点分析 一,链表的分类 链表有三种属性,每种属性有两种情况,总共有2…...

基于springboot丝绸之路”新疆自由行旅游网站设计与开发(源码+精品论文+答辩PPT等资料)

博主介绍:CSDN毕设辅导第一人、靠谱第一人、全网粉丝50W,csdn特邀作者、博客专家、腾讯云社区合作讲师、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交…...

英伟达NemoClaw平台或解决OpenClaw安全难题

英伟达CEO黄仁勋在周一的GTC主题演讲中宣布,公司已开发出企业级智能体平台NemoClaw。该平台基于热门开源框架OpenClaw构建,专为在企业自有硬件上本地构建和运行智能体而设计。这个新的开源平台本质上是集成了企业级安全和隐私功能的OpenClaw。根据英伟达…...

多例责任链模式

在本案例中我们模拟在618大促期间的业务系统上线审批流程场景像是这些一线电商类的互联网公司,阿里、京东、拼多多等,在618期间都会做一些运营活动场景以及提供的扩容备战,就像过年期间百度的红包一样。但是所有开发的这些系统都需要陆续的上…...

ROS2的核心概念E-参数

一、参数 参数是一种ROS系统中常用的数据传输方式。类似C编程中的全局变量,可以便于在多个程序中共享某些数据,参数是ROS机器人系统中的全局字典,可以在运行多个节点时共享数据。 二、参数的作用 在机器视觉识别时,有很多参数都…...

腾讯版「龙虾」Workbuddy上线当天,我用它搭了一套行业情报日报系统

写在前面最近 AI 圈最火的词大概是「龙虾」。OpenClaw 掀起了一波桌面 AI Agent 的热潮——不再是聊天窗口里你一句我一句的问答,而是让 AI 直接在你的电脑上干活:操作文件、执行脚本、联网搜索、交付结果。3 月 9 日,腾讯发布了 WorkBuddy&a…...

论文AI痕迹怎么消除?2026年最值得用的降AI率软件推荐

论文AI痕迹怎么消除?2026年最值得用的降AI率软件推荐 论文中的AI痕迹怎么才能消除干净?本文从AIGC检测原理出发,推荐2026年最值得使用的降AI率软件,附详细使用教程和效果对比。 论文AI痕迹怎么消除?2026年最值得用的降…...

数字临终关怀测试:临终病人AI陪伴系统的伦理边界‌

AI临终关怀系统的测试伦理新边疆随着人工智能技术在临终关怀领域的加速渗透,AI陪伴系统通过模拟逝者语音、分析患者情绪,提供情感支持,成为医疗数字化的重要应用。然而,这类系统涉及敏感生命数据与伦理决策,对软件测试…...

苹果公司称其即将到来的50周年庆典献礼是用户

就在苹果公司上周重大产品发布后不久,苹果公司CEO蒂姆库克分享了一封信函,纪念苹果公司成立50周年(1976年4月1日)这一即将到来的里程碑。看到苹果公司努力应对周年纪念这一概念确实很奇怪。这通常不是该公司的做法,因为…...

拒绝“镜像裸奔”:深度剖析 ACR 私有仓库鉴权机制与本地排障实战

🛡️ 拒绝“镜像裸奔”:深度剖析 ACR 私有仓库鉴权机制与本地排障实战 在云原生开发中,容器镜像仓库(如阿里云 ACR)是我们存放核心业务代码的“金库”。然而,很多开发者在将仓库状态改为 【私有 (Private)…...

2026年热门降AI率工具推荐!一键消除AI痕迹+稳过检测

2026年热门降AI率工具推荐!一键消除AI痕迹稳过检测 又到论文集中提交、自媒体内容批量产出的时间段,不少同学和创作者都在为一件事头疼:AI生成痕迹太重,内容被平台判定为低质量,要么论文打回修改,要么自媒体…...

图表替代文字降AI率不会?看完这篇5分钟学会

图表替代文字降AI率,这个思路我用了快三个月才真正摸清楚门道。一开始只知道「AI率高了」,然后满篇改词换句,改完检测还是62%。后来有人告诉我,先把能换成图表的内容换掉,再上工具处理剩下的文字,AI率一次就…...

JS中的Set 核心认知

1. Set基础用法Set 是 ES6 新增的集合类型,核心特点是:存储唯一值(无重复元素),元素可以是任意类型(基本类型 / 引用类型),且遍历顺序与插入顺序一致。你可以把它理解为:…...

xtuoj矩形

这道题的思路是:1.将数据排序、去重、统计次数2.分为正方形和普通矩形处理,其中普通矩形处理运用了二分求解的思想,通过枚举每一条边x,找到其对应的上值maxy与下值miny,则对这一x满足条件的y也就是矩形个数有right-lef…...

大数据管理与应用如何结合?做好大数据管理与应用五大步骤

面对电脑里堆积如山的销售记录、用户反馈,你是不是觉得头疼,不知从哪里看起?心里清楚这些数字有用,却不知道怎么让它发挥作用? 大数据管理与应用脱节,是很多企业实际遇到的问题。大数据管理是基础工作&…...

结合之前对 **SSE流式输出** 和 **多智能体编排** 的探索,现在我们来深入 **异步任务处理**

结合你之前对 SSE流式输出 和 多智能体编排 的探索,现在我们来深入 异步任务处理。这是构建高性能AI应用的关键技术,特别是在处理长时间运行的代码生成任务时。 一、为什么需要异步任务处理? 同步 vs 异步对比 #mermaid-svg-ZNiJHP02TGpa4eEa{font-family:"trebuchet…...

【独家原创】基于(BO)Bayes-Transformer多变量时序预测(多输入单输出)附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…...

python-flask大学生二手电子数码产品交易平台设计与实现 _39qu9

目录实现计划概述需求分析技术选型功能模块设计数据库设计前后端开发测试与部署扩展功能建议项目技术支持可定制开发之功能创新亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作实现计划概述 开发一个基于Python-Flask的大学生二手电子数…...

复杂三维山地环境下小龙虾优化算法COA求解多无人机动态避障路径规划研究,MATLAB代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…...

动静态库原理与ELF文件详解

1. 什么是库 所有的库,本质都是源文件对应的 .o 文件动静态库中不要包含 main 函数静态库: .a[linux]、.lib[windows]动态库:.so[linux]、.dll[windows] 2. 静态库 静态库(.a):程序在链接的时候把代码链接到可执行文件中&#xff…...

【路径规划】基于时空A星算法求解带时间约束的多机器人路径规划问题附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…...

server.impl.ts 文件分析

server.impl.ts 文件分析 文件概述 server.impl.ts 是 OpenClaw 项目的网关服务器实现文件,负责启动和管理整个网关服务。它包含了网关服务器的核心功能,如配置加载、认证授权、通道管理、WebSocket 服务器、插件系统、健康监控等。 文件结构与功能分析 详细注释 import…...

[测试] Phase 1 Notion Draft

新一轮技术发布潮已然到来,工程团队在实际落地过程中遇到的事故与挑战成为关注焦点。近期多个新框架和开源工具陆续上线,开发者们在真实环境下进行了深度实测,结果令人深思。 技术发布背后的工程事故 在某次新框架发布后,团队迅速…...

Spring Boot 3.x 集成 AI 智能体实战

Spring Boot 3.x 集成 AI 智能体实战 本文介绍如何使用 Spring Boot 3.x 构建 AI 智能体应用,涵盖核心概念和详细实战步骤,帮助开发者快速上手智能体开发。 核心概念 Spring Boot 3.x:最新的 Spring Boot 版本,支持现代化开发特性…...

【第10篇】Mamba 100篇合集 · 从入门到天花板

【第10篇】Mamba 100篇合集 从入门到天花板 副标题:从技术到战略:Mamba 为何能成为 AI 换道超车的核心? 作者:华夏之光永存 专栏:Mamba 100篇全集 从入门到道级天花板 卷属:第一卷 入门篇(第…...

TCL发布会解析:Q9M Pro领衔,T7M系列双星登场,163吋Micro LED双曜压轴

3月17日,“当技术站上巅峰 普惠才有力量”2026 TCL SQD-Mini LED电视春季新品发布会隆重举行,TCL重磅推出Q9M Pro、T7M Pro、T7M Ultra、Max163M Pro、Max163M等一系列王炸级电视新品。其中,Q9M Pro、T7M Pro以及T7M Ultra系列的上市&#xf…...

某国赛CTF逆向题目Writeup:re2

目录脱壳第一层EXE第二层EXEFLAG脱壳 010打开 UPX改了特征码,版本5.1.0 直接拖到ida分析不出来 这里我们选择动态调试脱壳,先找OEP,f9运行到入口 触发TLS回调函数断点,停在了ret上 64位UPX壳中不会用一个明显的跨段jmp指令跳…...