4.2.2 MySQL索引原理以及SQL优化
文章目录
- 4.2.2 MySQL索引原理以及SQL优化
- 1. 索引与约束
- 1. 索引是什么
- 2. 索引的目的
- 3. 几种索引
- 4. 约束
- 1.外键
- 2. 约束 vs 索引的区别
- 5. 索引实现
- 1. 索引存储
- 2. 页
- 3. B+树
- 4. B+树层高问题
- 5. 自增id
- 6. 聚集索引
- 7. 辅助索引
- 8. innnodb体系结构
- 1. buffer pool
- 2. change buffer
- 9. 最左匹配原则
- 10. 覆盖索引
- 11. 索引下推
- 12. 索引失效
- 13. 索引原则
- 2. sql比较慢怎么办
- 1. 慢查询日志
4.2.2 MySQL索引原理以及SQL优化
1. 索引与约束
1. 索引是什么
- 索引是一种有序的数据结构,MySQL 中主要使用 B+ 树(InnoDB 引擎)来组织索引
- 它通过加快数据检索速度来提升数据库的查询效率
- 可理解为:数据库中的“目录”或“书的页码”
- 按照单个或者多个进行排序
2. 索引的目的
提升搜索效率
3. 几种索引
- 主键索引
- 表的唯一标识
- 不能为空 (NOT NULL) 且唯一 (UNIQUE)
- 每张表只能有一个主键
- 创建主键索引时,MySQL自动建立索引(底层通常是B+树)
-- 创建表时指定主键
CREATE TABLE users (id INT PRIMARY KEY,name VARCHAR(50)
);-- 或者先创建表,再加主键
ALTER TABLE users ADD PRIMARY KEY (id);
- 唯一索引
- 保证列值唯一,但允许为空(特殊场景除外)
- 不作为主键,可以有多个唯一索引
- 通常用于:手机号、邮箱、身份证号等
-- 创建唯一索引
CREATE TABLE employees (emp_id INT,email VARCHAR(100) UNIQUE,phone VARCHAR(20),PRIMARY KEY (emp_id)
);-- 或者后期添加唯一索引
ALTER TABLE employees ADD UNIQUE (email);
- 普通索引
- 仅加速查询速度
- 没有唯一性要求,key可以重复
- 可以为经常用作条件查询(WHERE)的列加普通索引
-- 创建普通索引
CREATE TABLE articles (id INT PRIMARY KEY,title VARCHAR(200),content TEXT
);-- 给 title 添加普通索引
CREATE INDEX idx_title ON articles(title);-- 或者这样
ALTER TABLE articles ADD INDEX (title);
- 组合索引
- 一个索引包含多个列
- 适合多列联合查询的场景
- 遵循最左前缀原则(查询时条件必须从索引的最左列开始)
-- 创建组合索引
CREATE TABLE orders (order_id INT PRIMARY KEY,user_id INT,product_id INT,order_date DATE
);-- 给 (user_id, product_id) 建组合索引
CREATE INDEX idx_user_product ON orders(user_id, product_id);-- 查询时如果条件是 user_id,或 user_id + product_id,则可以用到索引
SELECT * FROM orders WHERE user_id = 123;SELECT * FROM orders WHERE user_id = 123 AND product_id = 456;-- 但如果单查 product_id,是用不了这个组合索引的
- 全文索引
- 用于全文搜索
- 适合大文本内容的搜索
- 通常用于:文章、博客、产品描述等
-- 1. 创建表
CREATE TABLE blog_posts (id INT PRIMARY KEY AUTO_INCREMENT,title VARCHAR(255),content TEXT,FULLTEXT(title, content)
);-- 2. 插入数据
INSERT INTO blog_posts (title, content) VALUES
('MySQL Tutorial', 'Learn how to use MySQL database.'),
('Fulltext Search', 'Learn about fulltext search in MySQL.');-- 3. 搜索
SELECT * FROM blog_posts
WHERE MATCH(title, content) AGAINST('MySQL');
- 主键选择
innodb 中表是索引组织表,每张表有且仅有一个主键;- 如果显示设置 PRIMARY KEY ,则该设置的 key 为该表的主键;
- 如果没有显示设置,则从非空唯一索引中选择;
- 只有一个非空唯一索引,则选择该索引为主键;
- 有多个非空唯一索引,则选择声明的第一个为主键;
- 没有非空唯一索引,则自动生成一个 6 字节的 _rowid 作为主键;
4. 约束
InnoDB 本身提供对这些约束(PRIMARY KEY(主键约束),UNIQUE(唯一约束),NOT NULL(非空约束),FOREIGN KEY(外键约束),CHECK(检查约束))的支持,保证数据的正确性、安全性
1.外键
- 一个表中的字段依赖于另一个表的主键/唯一键;
- 保证两张表数据的关联完整性;
- 可以设置 级联操作(如删除/更新时一起变化)
-- 创建班级表
CREATE TABLE classes (class_id INT PRIMARY KEY,class_name VARCHAR(100)
);-- 创建学生表,并设置外键关联到班级表
CREATE TABLE students (student_id INT PRIMARY KEY,name VARCHAR(100),class_id INT,FOREIGN KEY (class_id) REFERENCES classes(class_id)
);
2. 约束 vs 索引的区别
项目 | 约束 | 索引 |
---|---|---|
定义 | 整性、合法性 | 加速数据查询效率 |
主要目的 | 保证正确性(不插错、不留空、不重复) | 提升性能(更快查找) |
本质 | 规则 | 数据结构(如B+树) |
关系 | 主键约束、唯一约束会自动生成对应索引! | 索引不一定带有约束,单纯为了提速 |
示例 | NOT NULL、UNIQUE、PRIMARY KEY、FOREIGN KEY | CREATE INDEX idx_name ON table(col) |
5. 索引实现
1. 索引存储
- 索引存储的数据结构通常是 B+树,而不是哈希表
- 索引是磁盘上的有序结构,不是存在内存中的
2. 页
- innoDB 的数据存储以 页(Page) 为最小单位,每一页大小通常是 16KB。
- 一棵 B+ 树的每个节点对应一个或多个磁盘页
- 数据读写以页为单位进行(减少磁盘 I/O 次数)
3. B+树
- B+树是数据库默认的索引结构
- 每个节点存放有序的数据键值+指向子节点的指针
- 所有数据都存放在叶子节点
- 叶子节点之间有链表连接(范围查询快)
4. B+树层高问题
- 理想状态下,B+树的高度很低,一般在 2-4层
- 为什么?
因为一页(16KB)能存很多索引项(假设一项占 16字节,1页能存1024项);所以即使存百万条数据,只要 2-3 次磁盘IO 就能找到,非常快!
5. 自增id
- 很多表喜欢用 自增ID(auto_increment) 作为主键。
- 自增ID的好处:
插入数据总是追加到B+树的最右边;
避免频繁分裂、重排;
插入性能最好
放心用,根本用不完
6. 聚集索引
- InnoDB 的每张表数据文件本身就是一棵 B+树,称为聚集索引。
- 主键索引就是数据本身
- 特点:
按主键顺序存储;
查找主键非常快;
非主键(普通索引)存储的是【主键值】作为指针
7. 辅助索引
- 除了主键外,创建的其他索引,都是辅助索引
- 辅助索引的叶子节点,不直接存储数据行,而是存储【主键值】
- 查询时,先通过辅助索引找到主键,再通过主键去聚集索引找完整数据(回表)
总之,索引信息和数据信息的分层管理,便于高效的组织磁盘数据,快速实现单点和范围查询
8. innnodb体系结构
1. buffer pool
Buffer Pool 是 InnoDB 把磁盘上的数据页、索引页、插入缓冲(Change Buffer)、自适应哈希索引等缓存到内存中的区域。
目的是:减少磁盘 I/O,提高数据库访问速度。
特点:
- 查询数据时优先从 Buffer Pool 取(命中则速度很快)
- 如果没有命中,才从磁盘读入,并加入 Buffer Pool(可能引发淘汰机制,比如 LRU)
- 包括脏页管理(数据被修改但未刷盘)机制
2. change buffer
Change Buffer 是 InnoDB 中专门为二级索引的插入、更新、删除操作设置的缓存区域,延迟将二级索引变更写入磁盘,从而减少磁盘 I/O。
**原理:
- 对于二级索引的插入/修改,不直接去磁盘更新,而是先记录到 Change Buffer。
- 之后在一定条件(比如页被读取进内存,或系统空闲时)才真正合并到磁盘上的二级索引页。
为什么只针对二级索引(非主键索引)?
- 因为主键索引(聚集索引)必须保证实时一致性。
- 二级索引允许延迟一致,所以可以先缓存在 Change Buffer。
CREATE TABLE user (id INT PRIMARY KEY, -- 主键,主索引name VARCHAR(50),age INT,email VARCHAR(50),INDEX idx_name (name) -- 二级索引
);
--id 是 主索引(一级索引):--叶子节点:存的是整行数据,比如 {id=1, name="张三", age=20, email="xx@xx.com"}--name 是 辅助索引(二级索引):--叶子节点:只存 {name="张三", id=1}--如果通过 name 查找,还需要根据 id 再去主索引回表拿到完整那一行。
一级索引(主索引):叶子节点存整行
二级索引(辅助索引):叶子节点存主键id,查询时需要回主键索引再拿数据
9. 最左匹配原则
组合索引在查询时,会优先用最左边的列开始匹配,从左到右连续匹配才能用上索引
CREATE INDEX idx_user_name_age ON users(name, age);SELECT * FROM users WHERE name = 'Tom'; -- 用上索引
SELECT * FROM users WHERE name = 'Tom' AND age = 18; -- 用上索引
SELECT * FROM users WHERE age = 18; -- 用不了索引(跳过了最左的 name)
10. 覆盖索引
查询的数据只需要索引里的字段,不用回表到原表,因此速度更快
CREATE INDEX idx_name_age ON users(name, age);SELECT name, age FROM users WHERE name = 'Tom'; -- 覆盖索引
--因为 name 和 age 都在 idx_name_age 这个索引里,不需要回表SELECT name FROM users WHERE name = 'Tom'; -- 回表了
11. 索引下推
在索引遍历阶段就尽量筛选数据,减少回表次数,提升查询性能
SELECT * FROM users WHERE name LIKE 'Tom%' AND age = 18;
-- 假设没有索引下推,会先根据 name LIKE 'Tom%' 找到满足条件的索引项,然后再根据 age = 18 进行过滤。-- 而索引下推则是在索引遍历阶段就对 WHERE 条件进行筛选,减少回表次数。
--少了很多不必要的回表
12. 索引失效
一些不合理的 SQL 写法,会导致原本能用的索引失效,导致全表扫描
13. 索引原则
原则 | 内容 |
---|---|
最优选择 | 尽量选择区分度高的列建立索引 |
组合优先 | 多条件查询,建组合索引,遵循最左匹配 |
覆盖优先 | 尽可能做到查询只用索引(覆盖索引) |
更新慎用 | 索引太多,更新、插入性能会变差 |
合理选择 | 小表不建索引,大表必须优化索引 |
防止失效 | 避免在索引列上做函数、运算、隐式转换 |
2. sql比较慢怎么办
1. 慢查询日志
- 慢查询日志是 MySQL 提供的一种日志记录机制,用于记录执行时间超过阈值的 SQL 语句。
- 可以通过配置来开启慢查询日志,设置阈值,然后查看日志文件来分析哪些 SQL 语句耗时。
相关文章:
4.2.2 MySQL索引原理以及SQL优化
文章目录 4.2.2 MySQL索引原理以及SQL优化1. 索引与约束1. 索引是什么2. 索引的目的3. 几种索引4. 约束1.外键2. 约束 vs 索引的区别 5. 索引实现1. 索引存储2. 页3. B树4. B树层高问题5. 自增id6. 聚集索引7. 辅助索引 8. innnodb体系结构1. buffer pool2. change buffer 9. 最…...
02_值相同、类型不同,用 equals() 比较为什么是 false?
02_值相同、类型不同,用 equals() 比较为什么是 false? 场景示例 Map<Long, String> map; Integer keyWord 4; if (map.containsKey(keyWord)) {// ... }结果: → 编译通过,但 containsKey 返回 false,逻辑错…...
leetcode--盛最多水的容器,接雨水
11.盛最多水的容器 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明:你不…...
AlexNet网络搭建
AlexNet网络模型搭建 环境准备 首先在某个盘符下创建一个文件夹,就叫AlexNet吧,用来存放源代码。 然后新建一个python文件,就叫plot.py吧,往里面写入以下代码,用于下载数据集: # FashionMNIST里面包含了…...
常用第三方库:sqflite数据库应用
常用第三方库:sqflite数据库应用 一、基础概念 1.1 什么是sqflite? sqflite是Flutter官方推荐的SQLite数据库插件,它提供了在Flutter应用中使用SQLite数据库的能力。SQLite是一个轻量级的、嵌入式的关系型数据库,特别适合移动应…...
【论文阅读】-周总结-第5周
1. 【论文阅读24】并行 TCN-LSTM 风电预测模型(2024-02) 链接 论文信息: Liu S, Xu T, Du X, et al. A hybrid deep learning model based on parallel architecture TCN-LSTM with Savitzky-Golay filter for wind power prediction. Ener…...
深入理解 JavaScript 的 typeof 运算符:返回的数据类型
JavaScript 的 typeof 运算符是开发中用于检测值类型的基础工具。虽然看似简单,但其行为存在需要开发者理解的微妙细节。本文将解析 typeof 返回的数据类型,探讨边界案例,并分享类型检查的最佳实践。 typeof 会返回哪些类型? typ…...
前端零基础入门到上班:【Day8】JavaScript 基础语法入门
前端零基础入门到上班:【Day8】JavaScript 基础语法入门(超全!!!) 一、JavaScript 简介二、引入 JavaScript 的三种方式三、变量与常量(var、let、const)3.1 var (传统方式ÿ…...
ppt流程图怎么?ppt流程图模板大全
ppt流程图怎么?ppt流程图剪头模板,ppt流程图模板大全: ppt流程图_模板素材_PPT模板_ppt素材_免抠图片_AiPPTer...
makefile总结
Makefile 学习视频:1、野火的基础入门篇-第32讲 Makefile三要素_哔哩哔哩_bilibili 2、b站视频04 一个稍复杂的Makefile_哔哩哔哩_bilibili 学习资料:第2个视频对应的Make/make.md 无限十三年/CPP - 码云 - 开源中国 ch0_Makefile简介 Makefile是什…...
MIME 类型是个什么东西?
MIME 类型(Multipurpose Internet Mail Extensions)即多用途互联网邮件扩展类型,它是一种标准,用于表示文档、文件或字节流的性质和格式。 最初设计用于电子邮件系统,后来被广泛应用于网页、HTTP 协议等领域࿰…...
javaWeb开发---前后端开发全景图解(基础梳理 + 技术体系)
在现代互联网开发中,前端与后端的分工协作非常重要。本文结合实际架构图,全面梳理前端技术栈、后端技术栈以及服务器端整体流程,帮助初学者建立清晰的整体认知。 一、整体架构概览 系统整体划分为三个主要部分: B端(…...
spring-rabbit的CachingConnectionFactory默认参数导致消费者Channel数量暴增问题解决
文章目录 1.前言2.解决2.1消费监听方法中关闭channel2.2 配置设置两个参数 3.总结 1.前言 由于之前写了一个好用的rabbitmq-spring-boot-start启动器,后面在生产实践之后反馈消费者连接的Channel数量过多,一个消费者的Channel数量可以达到好几百…...
线上JVM调优与全栈性能优化 - Java架构师面试实战
线上JVM调优与全栈性能优化 - Java架构师面试实战 本文通过一场互联网大厂的Java架构师面试,深入探讨了线上JVM调优、OOM定位、死锁定位、内存和CPU调优、线程池调优、数据库调优、缓存调优、网络调优、微服务调优及分布式调优等关键领域。 第一轮提问 面试官&am…...
【KWDB创作者计划】_企业级多模数据库实战:用KWDB实现时序+关系数据毫秒级融合(附代码、性能优化与架构图)
一、技术背景与行业痛点 1.1 多模数据融合挑战 场景痛点: 工业物联网设备每秒产生百万级传感器数据(时序数据)。需关联设备档案(关系数据)生成设备健康报告,传统方案需多数据库跳转,延迟>5…...
“八股训练营”学习总结
在参加为期 40 天的八股训练营的这段时间里,我收获满满,不仅在知识技能上得到了提升,更在学习习惯和自我认知方面有了很大的进步。 在知识层面,训练营涵盖了网络、数据库、缓存以及python测试开发等多方面的知识点。 网络方面&a…...
java工具类
LocalDateTime LocalDateTime可以获取当前时间: LocalDateTime now LocalDateTime.now(); 同时他也可以获取指定时间: LocalDateTime dateTime LocalDateTime.of(2023, 5, 15, 10, 30) 若我们时间值超出了我们的实际情况值,我们将会出现…...
「OC」源码学习——alloc与init的实现
「OC」源码学习——alloc与init的实现 前言 费劲千辛万苦终于项目给写完了,进入下一个阶段,源码的学习 alloc的调用顺序 我们在main函数之中打上断点,先运行 再在alloc之中的各个函数之中打上断点,在关键步骤上打上断点&#…...
AOSP Android14 Launcher3——动画核心类QuickstepTransitionManager详解
Launcher3中,有一个类在跟桌面相关的各种动画中扮演着非常关键的角色,这个类就是QuickstepTransitionManager。 QuickstepTransitionManager在aosp中的路径为:aosp/packages/apps/Launcher3/quickstep/src/com/android/launcher3/QuickstepT…...
STM32:看门狗
独立看门狗 简介 独立看门狗(IWDG)由独立的低速时钟(LSI)驱动,即便主时钟发生故障,它依然能够正常工作。其主要作用是在程序出现异常时,通过复位来保障系统的稳定性。独立看门狗的喂狗操作相对…...
第十三步:vue
Vue 1、上手 1、安装 使用命令:npm create vuelatestvue文件后缀为.vueconst app createApp(App):初始化根组件app.mount("#app"):挂载根组件到页面 2、文件 script标签:编写jstemplate标签:编写htmls…...
《代码整洁之道》第8章 边界 - 笔记
甚至是你团队里其他组写的你无法随意修改的代码。 这些外部代码是你的**“边界”。它们可能会升级、可能会有 Bug、可能会有反人类的设计、甚至你将来可能想换一个类似的库或服务。如果你的应用代码直接且紧密地依赖**这些外部代码的具体类、方法、异常等细节,那么…...
【CF】Day45——Codeforces Round 1021 (Div. 2) BC
阅读理解。。。不过挺有意思( B. Sasha and the Apartment Purchase 题目: 思路: 看了半天没看懂... 题目叽里咕噜一大堆,说白了就是让我们在一个 可删除k个数 的 数组 中选 一些点 且 这些点的f(x) 是此时 删完了k个数之后的数组…...
《代码整洁之道》第5章 格式 - 笔记
你应该选择一套管理代码格式的简单规则。如果是团队,应该选择一套团队一致同意采用的简单格式规则。 最重要的原则:一致性(Consistency)! 没有完美的格式规范,但有统一的规范。 整个团队(或者…...
通过示例学习:连续 XOR
通过示例学习:连续 XOR 如果我们想在 PyTorch 中构建神经网络,可以使用 (with) 指定所有参数(权重矩阵、偏差向量),让 PyTorch 计算梯度,然后调整参数。但是,如果我们有很…...
加密算法 AES、RSA、MD5、SM2 的对比分析与案例(AI)
加密算法 AES、RSA、MD5、SM2 的对比分析 一、相同点 密码学基础 均为现代密码学核心算法,用于保障数据安全。数据处理 均涉及数据转换(加密、签名、哈希等)。密钥依赖 AES、RSA、SM2 依赖密钥(对称或非对称&#x…...
基于STM32、HAL库的MAX31865模数转换器ADC驱动程序设计
一、简介: MAX31865是一款高精度的铂电阻温度检测器(RTD)至数字转换器,具有以下特点: 支持2线、3线或4线RTD配置 15位ADC分辨率 可编程RTD和基准电阻 内置故障检测(开路、短路等) SPI接口通信 工作电压:3.0V至3.6V 二、硬件接口: STM32L4XX <--> MAX31865 PA5(SCK…...
Laravel5.7的一些用法
1、事件需要运行 php artisan queue:work 2、数据库对象关联 1对1 hasOne 1对多 hasMany 1依赖多 belongsTo 多依赖多 belongsToMany 3、 关联查询 with 关联统计 withCount 统计时指定字段名。 如: withCount([cardHolderOrders as order_count]); 4、 // 一次查询&…...
Vue3 + OpenLayers 开发教程 (六)WebGL渲染优化
1. WebGL 渲染优化 1.1 WebGL 渲染器配置 创建 src/utils/webgl.ts: import { Map } from ol; import { WebGLPointsLayer } from ol/layer; import { Vector as VectorSource } from ol/source; import { Style, Circle, Fill, Stroke } from ol/style;// 创建 …...
【C++】C++11新特性(一)
文章目录 列表初始化initializer_list左值引用和右值引用 列表初始化 在 C98 中可以使用{}对数组或者结构体元素进行统一的列表初始值设定 struct Point {int _x;int _y; }; int main() {int array1[] { 1, 2, 3, 4, 5 };int array2[5] { 0 };Point p { 1, 2 };return 0; …...
【网络原理】 网络编程套接字
文章目录 一、网络编程基础1. 为什么需要网络编程?2. 什么是网络编程3 .网络编程中的基本概念发送端和接收端请求和响应客户端和服务端 4. 常见的客户端服务端模型 二、Socket套接字1. 概念2.分类3. Java数据报套接字通信模型4.Java流套接字通信模型 三、UDP数据报套…...
每天五分钟深度学习框架pytorch:使用visdom绘制损失函数图像
visdom的安装 pip install visdom如果安装失败 pip install --upgrade visdom开启visdom python -m visdom.server nohup python -m visdom.server后台启动然后就会出现,下面的页面,我们可以使用下面的链接打开visdom页面 Visdom中有两个重要概念: env环境。不同环境的可…...
【MySQL专栏】MySQL数据库表的内外连接
文章目录 1、表的内连接(1)内连接的语法格式①显示SMITH的名字和部门名称 2、外连接(1)左外连接左外连接的语法格式通过实例演示: (2)右外连接右外连接的语法格式通过实例演示 1、表的内连接 什…...
-信息革命-
信息革命-马歇尔麦克卢汉(MARSHALL McLUHAN),1964年 随着大系统的加速崩溃,作为塑造经济生活和收入分配的一个因素,系统性的强 制将会式微。很快,在社会机构的组织中,效率将会比权力的分配更加重…...
Charles 抓包入门教程
一、什么是 Charles? Charles 是一款功能强大的抓包工具,可以拦截、查看、分析电脑和手机上的 HTTP/HTTPS 网络请求。常用于: 查看网页或App发送的请求和返回的数据调试接口、分析问题模拟网络环境(断网、慢速网络)修…...
深度学习新趋势:利用MLP取代卷积层——S2-MLPv2模型解析
深度学习新趋势:利用MLP取代卷积层——S2-MLPv2模型解析 近年来,深度学习领域不断涌现出新的技术革新,而其中最引人注目的趋势之一就是用多层感知机(MLP)替代传统的卷积层。这种转变不仅带来了计算效率的提升…...
【玩转 JS 函数式编程_016】DIY 实战:巧用延续传递风格(CPS)重构倒计时特效逻辑
文章目录 巧用延续传递风格(CPS)重构倒计时特效逻辑1 起因2 换一种思路3 填坑之旅4 复盘与小结 写在前面 都说念念不忘,必有回响。写过的文章也好,看过的视频也罢,其实只要用心积累,不必刻意去死记硬背&…...
虚函数表的设计和多态的实现
虚表指针 类直接定义虚函数:编译器自动在对象头部插入 vptr。 继承含虚函数的父类:子类复用父类的 vptr,不会创建新的vptr 单继承(子类继承一个含虚函数的父类) 1.创建新的虚函数表 2.沿用父类的虚表指针ÿ…...
中国科学院大学计算机考研历年初试分数线分析以及计算机所考的科目有哪些?
以下是对中国科学院大学计算机考研历年初试分数线分析以及计算机所考科目的介绍: 历年初试分数线分析 • 2024 年 :计算机应用技术专业(专业代码 081203)和计算机技术专业(专业代码 085404)的复试分数线为…...
Simulink与C的联合仿真调试
背景 simulink的Matlab Function,默认采用double类型的数据,无法定制int或者single类型的数据;Simulink中的Matlab Function直接调用.m文件中的函数(该函数中对数据类型有single或者int的定义),该函数中的…...
DeepSeek 多头潜在注意力(Multi-Head Latent Attention, MLA)技术
1. 核心原理 多头潜在注意力(MLA)是Transformer架构的扩展技术,通过潜在空间投影和多注意力头并行计算增强模型对长序列和复杂特征的建模能力。 1.1 关键技术点 潜在空间压缩 将原始高维注意力矩阵投影到低维潜在空间,降低计算复…...
C# 类(Class)教程
在现代面向对象编程中,**类(Class)**是最基础、最重要的概念之一。通过学习类,我们可以理解怎样定义自己的数据类型,封装数据与行为,构建复杂的软件体系结构。本文将详细介绍C#中的类,从基础定义…...
Kubernetes学习笔记-环境变量的使用
如果项目需要一些灵活配置,减少硬编码或者避免敏感信息的暴露,可以考虑使用Kubernetes Pod下的容器的环境变量。 Pod容器设置环境变量的方式: 可以通过Deployment配置文件的env字段来设置环境变量 value env:- name: ACTIVE_PROFILEvalue: …...
git提交规范记录,常见的提交类型及模板、示例
Git提交规范是一种约定俗成的提交信息编写标准,旨在使代码仓库的提交历史更加清晰、可读和有组织。以下是常见的Git提交类型及其对应的提交模板: 提交信息的基本结构 一个标准的Git提交信息通常包含以下三个主要部分: Header:描…...
关于指针和指针算术
第一次读C primer plus 第六版时,关于指针的语法一些名词没有用心去理解,再读的时候,讲到指针算术这个词时,感觉之前读像是漏了很关键的点,这次读,写下关于指针算术的思考。 有漏了的感觉是,在…...
el-input限制输入只能是数字 限制input只能输入数字
方法一: 通过设置type属性:type“number”,这种方式一般会影响样式,不建议使用,如下图: <el-input type"number" v-model"aaa"></el-input>方法二: 通过绑定值…...
Pydantic:校验器(@validator)、模型嵌套、模型继承
📚 1. 校验器(validator) Pydantic 允许你自定义字段验证逻辑。用 validator 装饰器可以在字段赋值时自动进行检查或修改。 例子: from pydantic import BaseModel, validatorclass User(BaseModel):name: strage: intvalidato…...
343. 整数拆分
给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。 示例 1: 输入: 2输出: 1解释: 2 1 1, 1 1 1。 示例 2: 输入: 10输出: 36解释: 10 3 3 4, 3 3 4 36。说明: 你可以假设 n 不小于 2…...
前端面试 js
作用域链 内存管理 垃圾回收器 引用计数 默认栈里面会有一次引用 问题:循环引用,会产生内存泄漏 标记清除 垃圾回收期会定期从根开始遍历,找到有引用的对象 闭包 内存泄漏 this的指向 默认绑定 独立调用的this都是window function foo()…...
Linux CentOS 安装Python 3.8.0
在 CentOS 上升级 Python 3.6.8 到 3.8.0,可以按照以下步骤操作: 1. 安装依赖 sudo yum groupinstall -y "Development Tools" sudo yum install -y openssl-devel bzip2-devel libffi-devel zlib-devel wget 如果遇到报错“File "/bin…...