MYSQL【进阶】 -> 索引(了解)
索引初始一、索引没有索引可能会发生什么问题呢索引提高数据库的性能索引是物美价廉的东西不用加内存不用改程序不用调sql只要执行正确的create index查询速度就可能提高成白上千但是天下没有免费的午餐查询速度的提高是以插入、更新、删除为代价的这些写操作增加了大量的IO所以它的价值在于提高一个海量数据的检索速度Mysql的服务器本质是在内存中所有数据库的CRUD操作全部是在内存中进行的索引也是如此。提高算法效率的因素组织数据的方式和算法本身常见索引分为主键索引唯一索引普通索引全文索引 ————解决中子文索引问题看看索引怎么跑的先整一个海量表在查询的时候看看没有索引有什么问题drop database if exists bit_index; create database if not exists bit_index default character set utf8; use bit_index; delimiter $$ create function rand_string(n INT) returns varchar(255) DETERMINISTIC begin declare chars_str varchar(100) default abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ; 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) DETERMINISTIC 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 ; CREATE TABLE EMP ( empono int(6) unsigned zerofill NOT NULL COMMENT 雇员编号, ename varchar(10) DEFAULT NULL COMMENT 雇员姓名, job varchar(9) DEFAULT NULL COMMENT 雇员职位, mgr int(4) unsigned zerofill DEFAULT NULL COMMENT 雇员领导编号, hiredate datetime DEFAULT NULL COMMENT 雇佣时间, sal decimal(7,2) DEFAULT NULL COMMENT 工资月薪, comm decimal(7,2) DEFAULT NULL COMMENT 奖金, deptno int(2) unsigned zerofill DEFAULT NULL COMMENT 部门编号 ); call insert_emp(100001, 800000);创建出海量数据的表后查询员工编号为100002的员工我们可以看到这里一共耗时 0.23 秒这还是在本机一个人来操作在实际项目中如果放在公网中假如同时有 100000 个人并发查询那很可能就死机。解决方法创建索引换一个员工编号测试看看查询时间二、认识磁盘1、MySQL与存储MySQL给用户提供存储服务而存储的都是数据数据在磁盘这个外设当中。磁盘是计算机中的一个机械设备相比于计算机其他电子元件磁盘效率是比较低的再加上IO本身的特征可以知道如何提交效率是MySQL的一个重要话题2、磁盘3、磁盘中一个盘片4、扇区数据库文件本质其实就是保存在磁盘的盘片当中也就是上面的一个个小格子中就是我们经常所说的扇区。当然数据库文件很大也很多一定需要占据多个扇区从上图可以看出在半径方向上距离圆心越近扇区越小距离圆心越圆扇区越大那么所有的扇区都是默认512字节吗目前是的我们也这样认为。因为保证一个扇区多大是由比特位密度决定的不过在最新的磁盘技术中已经慢慢的让扇区大小不同了不过我们目前暂时不考虑这个问题。我们在使用Linux时所看到的大部分目录/文件其实就是保存在硬盘当中。当然有一些内存文件系统如procsys之类的我们不做考虑数据库文件的本质其实就是保存在磁盘当中就是一个个的文件所以最基本的找到一个文件的全部本质就是磁盘找到所有保存文件的扇区而我们能够定位任何一个扇区那么便能找到所有扇区因为查找的方式是一样的5、定位扇区柱面磁道多盘磁盘每盘都是双面大小完全相等。那么同半径的磁道整体上便构成了一个柱面。每个盘面都有一个磁头那么磁头和盘面的对应关系便是 1 对 1 的。所以我们只需要知道磁头Heads、柱面Cylinder等价于磁道、扇区Sector对应的编号。即可在磁盘上定位所要访问的扇区。这种磁盘数据定位方式叫做 CHS 。不过实际系统软件使用的并不是 CHS但是硬件是而是 LBA 一种线性地址可以想象成虚拟地址与物理地址。系统将 LBA 地址最后会转化成为 CHS 交给磁盘去进行数据读取。不过现在不关心转化细节只需要知道这个东西让我们逻辑自洽起来即可。6、结论我们现在已经能够在硬件层面定位任何一个基本数据库扇区了那么在系统软件上面就直接按照扇区512字节部分4096字节进行IO交互吗不是如果操作系统直接使用硬件提供的数据大小进行交互那么系统的IO代码就和硬件强相关。换而言之如果硬件发生变化系统也会发生变化从目前来看单次IO 512字节还是太小了。IO 单位小意味着读取同样的数据内容需要多次磁盘访问会带来效率的降低之前学习文件系统就是在磁盘的基本结构下简历 的文件读取基本单位就是不是扇区而是数据块所以系统读取磁盘是以快为单位的其基本单位是4KB7、磁盘随机访问与连续访问随机访问本次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 区分四、建立共识MySQL 中的数据文件是以 page 为单位保存在磁盘当中的。MySQL 的 CURD 操作都需要通过计算找到对应的插入位置或者找到对应要修改或者查询的数据。只要涉及计算就需要 CPU 参与而为了便于 CPU 参与一定要能够先将数据移动到内存当中。所以在特定的时间内数据一定是磁盘中有内存中也有。后续操作完内存数据之后以特定的刷新策略刷新到磁盘。而这时就涉及到磁盘和内存的数据交互也就是 IO 了。而此时 IO 的基本单位就是 Page。为了更好的进行上面的操作 MySQL 服务器在内存中运行时在服务器内部就申请了被称为 Buffer Pool 的的大内存空间来进行各种缓存其实就是很大的内存空间来和磁盘数据进行 IO 交互。为了达到更高的效率一定要尽可能的减少系统和磁盘 IO 的次数。

相关新闻

C语言字符串与内存函数深度解析:从原理到模拟实现

C语言字符串与内存函数深度解析:从原理到模拟实现

1. 项目概述:为什么我们需要亲手“造轮子”?在C语言的世界里,字符串和内存操作是编程的基石。无论是处理用户输入、解析配置文件,还是构建复杂的数据结构,都离不开strcpy、memcpy、strcmp这些耳熟能详的库函数。它们封…

2026/8/29 20:56:28 阅读更多 →
从零构建迷你Transformer语言模型:核心概念与PyTorch实现详解

从零构建迷你Transformer语言模型:核心概念与PyTorch实现详解

如果你是一名刚接触人工智能的开发者,或者正在犹豫“大模型到底从哪学起”,这篇文章会给你一条比较完整的路径。标题里的“17岁”不是重点,重点是一个起点:当你决定不满足于调用 API,而是想亲手构建一个语言模型、理解…

2026/8/28 18:47:23 阅读更多 →
从零构建无线充电智能车:STM32控制、PID算法与电磁感应能量管理实战

从零构建无线充电智能车:STM32控制、PID算法与电磁感应能量管理实战

1. 项目概述:从零到一,构建一辆无线充电智能车 全国大学生智能汽车竞赛,对于每一个工科生来说,都是一个充满挑战与激情的舞台。它远不止是让一辆小车跑起来那么简单,而是一个集机械、电子、控制、算法于一体的综合性系…

2026/8/28 18:47:23 阅读更多 →

最新新闻

python学习笔记4.5 ---实现一个图书管理系统(使用容器 类)

python学习笔记4.5 ---实现一个图书管理系统(使用容器 类)

一.只使用容器 # todo 存储书籍信息的列表放到循环外 防止每次循环都刷新 book_list = [] while True:print("""欢迎来到图书管理系统1.添加图书2.根据id修改3.根据id查询4.查询所有图书5.根据id删除某个图书6.退出""")choose = input("请…

2026/8/29 20:56:17 阅读更多 →
Windows 下 STM32MP157‑M4 OpenOCD/GDB 疑难杂症:No registers、10054、UsageFault、编码警告

Windows 下 STM32MP157‑M4 OpenOCD/GDB 疑难杂症:No registers、10054、UsageFault、编码警告

技术博客|面向 STM32MP157 M4 核 LiteOS-M 移植的开发者 一句话结论:M4 跑在内部 SRAM、用 OpenOCD GDB 在 Windows 上调试,坑几乎全在「GDB 与 OpenOCD 的协作方式」上,不在你的代码。 本文把 No registers、10054、UsageFault…

2026/8/29 20:56:17 阅读更多 →
蓝桥杯单片机国赛程序架构与驱动开发实战指南

蓝桥杯单片机国赛程序架构与驱动开发实战指南

1. 从“国赛”到“程序”:一次完整的蓝桥杯单片机项目复盘 最近在整理过往的技术笔记,翻到了当年参加第十届蓝桥杯单片机国赛时写下的程序。看着那些密密麻麻的注释和调试痕迹,很多当时的场景和思考又清晰地浮现出来。蓝桥杯的单片机竞赛&…

2026/8/29 20:56:17 阅读更多 →
蓝桥杯国赛B组真题深度解析:动态规划、DFS与算法实战技巧

蓝桥杯国赛B组真题深度解析:动态规划、DFS与算法实战技巧

1. 项目概述:一次国赛B组真题的深度复盘最近在整理硬盘里的老项目,翻到了2021年第十二届蓝桥杯国赛B组的真题代码。时间过得真快,一晃三年过去了,但当时在赛场上那种紧张、专注,以及面对难题时绞尽脑汁的感觉&#xff…

2026/8/29 20:56:17 阅读更多 →
基于SpringBoot的电缆生产管理系统:架构设计与核心业务实现

基于SpringBoot的电缆生产管理系统:架构设计与核心业务实现

简介:生产管理系统是制造业数字化转型的核心,它通过整合订单、物料、设备和人员信息,实现生产过程的透明化、精细化和可追溯。其核心原理在于将业务流程数据化,利用数据库和业务逻辑层固化生产规则,从而优化排程、控制…

2026/8/29 20:56:17 阅读更多 →
C语言实现《超级玛丽》:从状态机到碰撞检测的硬核游戏开发指南

C语言实现《超级玛丽》:从状态机到碰撞检测的硬核游戏开发指南

简介:游戏开发的核心在于对底层逻辑的掌控,其中状态机是管理游戏流程的关键架构,它通过枚举不同游戏状态(如菜单、进行中、暂停)并利用switch-case结构进行逻辑分发,实现了清晰的流程控制。碰撞检测则是游戏…

2026/8/29 20:55:16 阅读更多 →

日新闻

etc目录下的profile.d文件目录设置环境变量和全局脚本shell

etc目录下的profile.d文件目录设置环境变量和全局脚本shell

一、设置环境变量etc目录下的profile.d文件目录 /etc/profile.d1、编写 vi test.sh文件内容# jdk变量 export ZHK_HOME/root export PATH$PATH:$ZHK_HOME/test # 可以取出来ZHK_HOME变量给ZZZ_HOME赋值 export ZZZ_HOME${ZHK_HOME}/test2、刷新 执行source /etc/profile 命令使…

2026/8/29 0:00:24 阅读更多 →
【JavaScript】内存管理-垃圾回收机制-内存泄露

【JavaScript】内存管理-垃圾回收机制-内存泄露

内存管理 C 语言这样的底层语言一般都有底层的内存管理接口,比如 malloc()和free()。 而 JavaScript 是在创建变量(对象,字符串等)时自动进行了分配内存,并且在不使用它们时“自动”释放。释放的过程称为垃圾回收。 整…

2026/8/29 0:00:24 阅读更多 →
Labgrid-MCP:为嵌入式硬件实验室接入AI Agent操控能力

Labgrid-MCP:为嵌入式硬件实验室接入AI Agent操控能力

Labgrid-MCP 的目标是把 MCP(Model Context Protocol)能力延伸到真实嵌入式硬件实验室:AI Agent 通过一个标准化的 MCP Server,就能查看目标板状态、控制上电断电、复位开发板、读取串口日志,甚至执行镜像刷写。对于经…

2026/8/29 0:00:24 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/29 18:08:35 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/28 23:05:07 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/28 19:47:53 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/29 4:34:53 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/28 17:43:04 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/29 2:05:18 阅读更多 →