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

mysql--索引

目录

1、长什么样

2、硬件理解

3、软件理解

4、进一步认识

5、索引的理解

6、为什么不选择其他数据结果?

7、聚簇索引和非聚簇索引

8、索引操作

(1)主键索引创建

第一种方式

第二种方式

第三种方式

主键索引的特点

(2)唯一键索引创建

第一种方式

第二种方式

第三种方式

唯一键索引的特点

(3)普通索引的创建

第一种方式

第二种方式

第三种方式

普通索引的特点

(4)查看索引

(5)删除索引

  (6)复合索引

9、哪一列适合作为索引?

10全文索引


理解索引,并熟悉相关索引操作

提高算法的因素:1、数据组织方式 2、算法本身
而索引,本质是一种数据的组织方式

索引是什么:主键、唯一键、普通索引

1、长什么样

代码:

alter table stu add index(id);

没有建立索引 VS 建立索引的区别:建立索引查询会更快,数量级的速度提高

2、硬件理解

IO硬件交互很慢,可以看博主操作系统部分关于文件系统的文章

3、软件理解

mysql进行大量的io交互,为了提高效率,每一次访问是16K,而非64k
mysql处于应用层
但是实际上,和底层硬件打交道的只有OS,
因此mysql和底层数据的交互实际上还是通过OS处理
此时,mysql实际上是和在os中开辟的一个缓冲区进行交互
在OS和硬件交互的实际情况中,还是每次以64K的大小进行

4、进一步认识

mysql的数据实际还是存储在磁盘中的
但是,mysql并不刻意绕过OS直接对硬件访问和操作
因此,数据需要通过OS加载到内存中
mysql的应用再将数据加载到自己的缓冲区内buffer pool进行相关操作
mysql自己处理数据时,每一次交互的单位是以16k作为基本单位,page
处理完的数据再交给OS
OS再通过合适的时机刷新回到磁盘
同时,mysql的CURD操作,是对数据的处理。
对数据的处理,本质就是计算
计算就要涉及CPU

5、索引的理解

现象:随机插入数据,但是查看表却是有序的!增加主键
如果不增加主键呢?

建表的时候,mysql会自动给我们进行数据排序
如果我们创建表的时候
没有指定主键列,会默认指定主键列
因此,不论是我们加上主键还是不加主键,都会自动以主键列进行排序
为什么?
为了方便查询
原来的数据是线性的排序:
图片
在原来的数据库数据结构中
事实上是一个一个大小为16K的page数据块,叫做数据页
以此为一个数据单元进行管理
再通过将这些数据单元进行线性连接排序
就得到一个整体的线性数据结构
这样,查找一个数据,
先找到第一个数据表找,如果没有
则到下一个数据表找,以此往后,直至找到
于是,数据的查询就是这样线性的方式进行
算法的执行,是依赖于数据结构而实现的
于是,在不建立索引的情况下
一般的查询都是以线性遍历为主
但是,当数据量很大的时候,
线性遍历的效率并不高
怎么办?
引入索引。
什么索引?
索引,其实就是目录
你可以理解为书本的目录
书本的内容就是数据
目录,就是对应的索引
这样,要找第n个数据,直接定向到对应数据页拿取数据即可
如何实现呢?
首先,在最底层的数据页上
一部分空间不存储数据,而是存储目录
例如:
1-100为一组
101-200为一组
201-300为一组
以此推之
现在你要找到第300个数据
如果是原来的线性遍历,你需要从前往后,规规矩矩遍历300次
但是现在不同,
你发现,300这个数据不在第一组,不在第二组,而是在第三组
于是,直接到第三组,再遍历第三组
于是,原本需要查找300次
现在只需要查找3+100次数
少了3倍!
如果是数据很大
那么,就再第一层的数据页的基础上,再加一层
第二层的数据页不存放数据,只存放目录索引
于是,数据查找的效率大大的提高!
因此,
索引的本质是使用16K的page数据页存储数据,然后引入目录
然后用B+树对page数据页进行管理
最底层是数据页,上层是目录页
这个叫做mysqk innode db下的索引结构
实质上,就是引入一个新的数据组织方式
依赖于这种B+树的特殊数据组织方式
使用了新的检索方法
从而提高了效率

B树:多叉树,底层数据为线性结构


6、为什么不选择其他数据结果?

链表是线性遍历,没区别
红黑树、AVL树?
虽然近乎于平衡,但是层级太高
和B+树对比,虽然都是自顶向下查询
但是,前二者是二叉树,后者是多叉树
明显多叉树要比二叉树的层级更低
层级低就意味着访问底层 I/O 的次数少
效率更高

hash?查找范围有限

7、聚簇索引和非聚簇索引

特性聚簇索引非聚簇索引
物理存储顺序是(根据索引的顺序存储数据)否(数据存储顺序与索引无关)
数据行数量只能有一个聚簇索引可以有多个非聚簇索引
性能适合范围查询和排序操作适合点查找和单列或多列的查询
存储结构数据和索引一起存储索引与数据分开存储
空间使用较少,因数据与索引合一占用额外存储空间

8、索引操作

索引分三类:主键索引、唯一键索引、普通索引

查看表的主键索引:

show index from table;

(1)主键索引创建

第一种方式

--在创建表的时候,直接在字段后指明主键索引

create table stu(
id int  primariy key;
name varchar(32),
gender  char(2)
);

第二种方式

--在创建表的最后,指定某列 / 几列为主键索引

create table stu (
id int,
name varchar(32),
gender cahr(2),
primary key (id)
);

第三种方式

create table stu(
id int,
name varchar(32),
gender char(2)
);--表格创建完毕后再添加主键alter table stu 
add primary key (id);

主键索引的特点

唯一性、

非空性、

自动创建、

提高查询性能、

支持外键、

排序


(2)唯一键索引创建

第一种方式

--在表格定义时,在字段后直接指定唯一键索引
create table stu (
id int primary key ,
name varchar(32) unique,
gender char(2)
);

第二种方式

--创建表时,在后面指定某列 / 几列作为唯一键索引
create table stu(
id int primary key,
name varchar(32),
gender char(2),
unique (name)
);

第三种方式

create table stu(
id int primary key,
name varchar(32),
gender char(2)
);--创建表完成后,再添加alter table stu
add unique(name);

唯一键索引的特点

一个表可有多个索引
查询效率高
某一列设定唯一键,则该列所有数据唯一
如果唯一键指定not null,则相当于主键索引

(3)普通索引的创建

第一种方式

create index index_name on table_name (column1, column2, ...);

第二种方式

create table table_name (column1 datatype,column2 datatype,...index index_name (column1, column2, ...)
);

第三种方式

​
create table  Employees (EmployeeID int primary key,LastName varchar(50),FirstName varchar(50),index index_name (FirstName)
);​

普通索引的特点

允许重复值、
检索变快、
支持多个列的组合索引、
不强制列中数据的唯一性、
即使在索引列中有重复值,插入操作依然可以顺利进行

(4)查看索引

show index from table_name;

(5)删除索引

drop index index_name on table_name;

  (6)复合索引

如果有一个表有多个索引,并不是分开建立B+树
而是以多个索引组合作为新索引创建B+树
这种索引,成为复合索引
复合索引最左匹配原则
索引覆盖

9、哪一列适合作为索引?

高频被读取
唯一性比较强
低频被修改
不会出现在where字句中的字段不建立索引

10全文索引

全文索引(Full-text Index)是一种特殊类型的索引,主要用于加速对大量文本数据的搜索和查询。它允许数据库高效地执行复杂的文本搜索操作,比如查找包含特定单词或短语的记录。以下是关于全文索引的详细说明,包括其定义、优缺点、实现方法以及常用数据库中的示例。

什么是全文索引
全文索引是针对文本字段(如文章、评论、描述等)建立的索引,使得在这些字段中进行搜索时,可以快速找到相关的记录。与普通索引不同,全文索引支持更复杂的查询,例如模糊搜索、布尔搜索和短语搜索。

相关文章:

mysql--索引

目录 1、长什么样 2、硬件理解 3、软件理解 4、进一步认识 5、索引的理解 6、为什么不选择其他数据结果? 7、聚簇索引和非聚簇索引 8、索引操作 (1)主键索引创建 第一种方式 第二种方式 第三种方式 主键索引的特点 &#xff08…...

【linux】线程 (三)

13. 常见锁概念 (一)了解死锁 死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程占有的,且不释放的资源,而处于的一种永久等待状态 (二)死锁四个必要条件 互斥条件…...

c++日常积累

在 C 中,可以直接将 int 类型的值赋值给 bool 类型。C 会自动进行类型转换,任何非零的 int 值都会被转换为 true,而 0 会被转换为 false。 QDialog 有一个 finished(int) 信号,该信号在对话框关闭时发出,并传递一个整…...

字节流写入文件

一、创建输出流对象表示的文件三种方式 方法一: FileOutputStream fos new FileOutputStream("fos.txt",true);//最简便方法二: FileOutputStream fos new FileOutputStream(new File("fos.txt"));方法三; File f ne…...

Torch模型导入

冻结param的3种方式 for param in net.lstm.parameters():param.requires_grad Truenet.lstm.requires_grad True # 无效net.lstm.state_dict()[weight_ih_l0].requires_gradFalsenet.lstm.weight_ih_l0.requires_grad False# dir(net.lstm) to validate attributes …...

博弈论:博弈类型空间集合;三层博弈拓展式;

目录 博弈论:博弈类型空间集合 θ(Dss-1=1 )就是博弈类型空间集合; 一、博弈的基本要素 二、博弈的主要类型 三、博弈类型空间集合的构建 三层博弈拓展式: 博弈论:博弈类型空间集合 这的博弈类型空间集合:指一方选择的策略,用符号进行表达:SDss-2(θDss-1=1) = …...

数据库表的关联、集合操作

数据库表的关联、集合操作 join、MySQL、Oracle什么left right的老是忘,归根到底还是不熟练,记录下来,以后就不用再搜了。 设表A、表B分别包含员工信息和部门信息。 表A包含员工的ID、姓名和部门ID, 表B包含部门ID和部门名称。 …...

word怎么清除格式,Word一键清除所有格式教程

你是否曾在编辑Word文档时遇到过复制内容时格式混乱的情况?别担心,这只需要清除一下格式就可以了,很多朋友还不知道word怎么清除格式,下面小编就来给大家讲一讲word一键清除所有格式的方法教程,操作非常简单,有需要的…...

ShardingProxy服务端分库分表

目录 一、为什么要有服务端分库分表? 二、ShardingProxy基础使用 1、部署ShardingProxy 2、配置常用分库分表策略 三、ShardingSphere中的分布式事务机制 1、什么是XA事务? 2、实战理解XA事务 3、如何在ShardingProxy中使用另外两种事务管理器&a…...

开源的 FOC(Field-Oriented Control) 项目

开源的 FOC(Field-Oriented Control) 项目通常用于控制无刷直流电机(BLDC)和永磁同步电机(PMSM)。这些项目可以实现高效的电机控制,广泛应用于机器人、无人机、电动车等领域。以下是一些著名的开…...

高等数学 5.5 反常积分的审敛法 Γ函数

文章目录 一、无穷限反常积分的审敛法二、无界函数的反常积分审敛法三、 Γ \Gamma Γ 函数 一、无穷限反常积分的审敛法 定理1 设函数 f ( x ) f(x) f(x) 在区间 [ a , ∞ ) [a, \infty) [a,∞) 上连续,且 f ( x ) ⩾ 0 f(x) \geqslant 0 f(x)⩾0.若函数 F (…...

宝塔安装ffmpeg的方法

宝塔安装ffmpeg的方法 wget http://download.bt.cn/install/ext/ffmpeg.sh && sh ffmpeg.sh安装完后可输入以下命令是否安装成功: ffmpeg -version...

案例分享-优秀蓝色系UI界面赏析

蓝色UI设计界面要提升舒适度,关键在于色彩搭配与对比度。选择柔和的蓝色调作为主色,搭配浅灰或白色作为辅助色,能营造清新、宁静的氛围。同时,确保文字与背景之间有足够的对比度,避免视觉疲劳,提升阅读体验…...

陪诊小程序之uniapp(从入门到精通)

1.uniapp如何使用vue3编写页面 <template><view class"content"><navbar name"navbar组件"></navbar><image class"logo" src"/static/logo.png"></image><view class"text-area"&…...

深度学习(一)基础:神经网络、训练过程与激活函数(1/10)

深度学习基础&#xff1a;神经网络、训练过程与激活函数 引言&#xff1a; 深度学习作为机器学习的一个子领域&#xff0c;近年来在人工智能的发展中扮演了举足轻重的角色。它通过模仿人脑的神经网络结构&#xff0c;使得计算机能够从数据中学习复杂的模式和特征&#xff0c;…...

源代码加密技术的一大新方向!

在当今这个信息爆炸的时代&#xff0c;企业所面临的数据安全挑战日益严峻。传统的文档加密方法已经无法满足日益复杂的安全需求。幸运的是&#xff0c;SDC沙盒加密系统以其革命性的安全理念和先进技术&#xff0c;为企业提供了一个更可靠、更高效的数据保护方案。 传统加密方案…...

SVN——常见问题

基本操作 检出 提交 更新 显示日志 撤销本地修改 撤销已提交内容 恢复到指定版本 添加忽略 修改同一行 修改二进制文件...

JavaCV 图像灰度化处理

&#x1f9d1; 博主简介&#xff1a;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编程&#xff0c;…...

基于Multisim三极管B放大系数放大倍数测量电路设计(含仿真和报告)

【全套资料.zip】三极管B放大系数放大倍数测量电路电路设计Multisim仿真设计数字电子技术 文章目录 功能一、Multisim仿真源文件二、原理文档报告资料下载【Multisim仿真报告讲解视频.zip】 功能 1.用三个数码管显示B的大小&#xff0c;分别显示个位、十位和百位。 2.显示范围…...

Molmo模型实战

安装pip文件 conda install pytorch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1 pytorch-cuda=11.8 -c pytorch -c nvidiapip install ...

Godot中型项目工程化实践:目录规范、资源引用与状态管理

1. 这不是续集&#xff0c;而是项目落地的分水岭“Godot 游戏引擎项目&#xff08;二&#xff09;”——看到这个标题&#xff0c;很多人第一反应是&#xff1a;“哦&#xff0c;上一篇讲了环境搭建和Hello World&#xff0c;这篇该讲节点树和信号了&#xff1f;”但我在带三个…...

别再盲跑了!手把手教你用Arduino Zero在IDE 2.0里设置断点单步调试

告别盲跑时代&#xff1a;Arduino Zero与IDE 2.0的源码级调试实战指南 当你的Arduino项目逻辑越来越复杂&#xff0c;仅靠串口打印调试就像在迷宫里摸黑前行——直到遇见Arduino Zero与IDE 2.0的调试组合。本文将揭示如何用这套工具实现 源码级精准调试 &#xff0c;即使你手…...

OpenClaw 连接阿里云百炼图文教程

OpenClaw 连接阿里云百炼图文教程 前置准备 已安装并可以正常打开 OpenClaw Windows。 OpenClaw 顶部 Gateway 状态保持在线。 已准备好可正常登录的阿里云账号。 可以正常访问阿里云百炼登录地址&#xff1a;https://bailian.console.aliyun.com/cn-beijing#/home 建议提…...

Win10系统清理避坑指南:你的BAT脚本真的安全吗?盘点那些不能乱删的文件

Win10系统清理避坑指南&#xff1a;BAT脚本安全操作手册每次看到那些号称"一键清理系统垃圾"的BAT脚本在技术论坛被疯狂转发&#xff0c;我的工程师朋友老张就会忍不住摇头。上周他刚帮一位设计师修复了崩溃的Photoshop——原因正是某个清理脚本删除了Adobe的临时工作…...

嘈杂工业场景下的自适应VAD与双码本声纹识别鉴权系统:基于端侧轻量化神经网络与向量量化(VQ)重构

在大型化工车间、能源集控中心以及金融极密隔离库房中&#xff0c;离线声纹识别是物理访问控制和身份安全核验的重要生物特征屏障。然而&#xff0c;在环境本底噪声高达80dB以上的恶劣工业场景下&#xff0c;常规的语音活动检测&#xff08;VAD&#xff09;会频繁误触&#xff…...

巧用对称性与平均值原理:低成本实现高精度电阻分压器校准

1. 项目概述&#xff1a;用数学思维突破测量设备的精度极限在电子实验室里捣鼓精密电路&#xff0c;尤其是涉及到电压基准、信号调理或者高精度ADC前端时&#xff0c;一个绕不开的坎就是精密分压器。你可能在设计一个需要0.1%甚至更高精度的分压网络&#xff0c;但手头的万用表…...

基于IRS2092的200W D类功放设计:从PWM原理到保护电路实战

1. 项目概述与核心思路折腾音响功放&#xff0c;从经典的AB类玩到D类&#xff0c;感觉就像是从燃油车换到了电动车&#xff0c;动力响应和效率完全是两个维度。这次要聊的这块“200W Class-D Audio Power Amplifier [150115]”单板功放&#xff0c;就是一个非常典型的D类功放设…...

从API Key管理视角看Taotoken平台的安全与审计功能

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 从API Key管理视角看Taotoken平台的安全与审计功能 对于依赖大模型API进行开发的团队而言&#xff0c;API Key的管理与安全是项目稳…...

从数据到模型:手把手教你预处理MPIIFaceGaze和EyeDiap数据集(Python实战)

从数据到模型&#xff1a;手把手教你预处理MPIIFaceGaze和EyeDiap数据集&#xff08;Python实战&#xff09;当你第一次打开MPIIFaceGaze或EyeDiap数据集的压缩包时&#xff0c;那种面对杂乱文件夹和神秘.mat文件的迷茫感&#xff0c;我太熟悉了。作为计算机视觉工程师&#xf…...

Noto字体终极指南:告别“豆腐块“,让全球文字清晰显示

Noto字体终极指南&#xff1a;告别"豆腐块"&#xff0c;让全球文字清晰显示 【免费下载链接】noto-fonts Noto fonts, except for CJK and emoji 项目地址: https://gitcode.com/gh_mirrors/no/noto-fonts 在数字世界中&#xff0c;你是否经常看到那些令人困…...