当前位置: 首页 > 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 ...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)

题目 做法 启动靶机&#xff0c;点进去 点进去 查看URL&#xff0c;有 ?fileflag.php说明存在文件包含&#xff0c;原理是php://filter 协议 当它与包含函数结合时&#xff0c;php://filter流会被当作php文件执行。 用php://filter加编码&#xff0c;能让PHP把文件内容…...