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

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh&#xff1f; debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

ip子接口配置及删除

配置永久生效的子接口&#xff0c;2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

Java编程之桥接模式

定义 桥接模式&#xff08;Bridge Pattern&#xff09;属于结构型设计模式&#xff0c;它的核心意图是将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过组合关系来替代继承关系&#xff0c;从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...