【MySQL | 六、索引特性(进一步理解)】
目录
- 索引的理解
- 索引的作用
- MySQL与磁盘的IO
- Page
- 单个Page的分类
- 多个Page的组织
- B+树的特点
- B+树和B树的区别
- 聚簇索引 VS 非聚簇索引
- 聚簇索引的优缺点
- 非聚簇索引的优缺点
- 创建索引
- 常见索引分为:
- 主键索引
- InnoDB主键索引的生成过程
- (1)初始化
- (2)插入数据
- (3)查询数据
- (4)删除数据
- 创建主键的三种方式语法:
- 主键索引的特点
- InnoDB存储引擎中的主键索引及特点
- MyISAM存储引擎中的主键索引
- 总结
- 主键索引的性能优化
- 选择合适的主键:
- 主键索引的注意事项
- 唯一索引
- 三种创建语法:
- MyISAM存储引擎下的创建一个唯一索引工作原理
- InnoDB存储引擎下的创建一个唯一索引的工作原理
- 唯一索引的特点
- 普通索引
- 语法(同样三种方式):
- MyISAM存储引擎全文索引
- explain工具
- 查看索引
- 语法:
- 删除索引
- 语法:
- 索引创建原则
索引的理解
索引的作用
- 索引的引入会提高查询速度,但会降低插入、更新和删除操作的性能,因为这些写操作需要维护索引结构,增加了额外的IO开销。
关于存储引擎的介绍见下篇
MySQL与磁盘的IO
- 多数磁盘的每个扇区存储512B,为了提高效率,操作系统与磁盘之间的交互以 块 为单位(通常为4KB)。这种连续访问方式可以减少磁头移动,提高IO效率。
- MySQL作为应用层软件,通过操作系统与磁盘进行交互。为了提高IO效率,以 page 为基本单位进行IO操作,InnoDB存储引擎的每个page的大小通常为16KB。
- MySQL中的数据文件,是以page为单位保存在磁盘当中的。
- MySQL的CURD操作,都需要通过计算,找到对应的插入位置,或者找到对应要修改或者查询的数据。
- 而只要涉及计算,就需要CPU参与,而为了便于CPU参与,一定要能够先将数据移动到内存当中。所以在特定时间内,数据一定是磁盘中有,内存中也有。后续操作完内存数据之后,以特定的刷新策略,刷新到磁盘。而这时,就涉及到磁盘和内存的数据交互,也就是IO了。而此时IO的基本单位就是Page。
- 为了更好的进行上面的操作,MySQL服务器在内存中运行的时候,在服务器内部,就申请了被称为 Buffer Pool 的大内存空间,来进行各种缓存。其实就是很大的内存空间,来和磁盘数据进行IO交互。
Page
MySQL要管理很多数据表文件,而要管理好这些文件就需要做好数据的存储与组织。前面我们知道MySQL进行IO的基本单位是page,而这些page就是用于数据存储与组织的载体。可以简单的理解为MySQL中一个个独立的文件就是由一个或多个page组成的。它们之间的组织结构就像本书一样。
单个Page的分类
-
普通页:
- 包含prev和next指针,与其他page构成双向链表。
- 大部分空间用于存储表的结构与数据,小部分空间作为页内目录,类似于书的目录,用于记录不同数据的大概位置,方便后续查找。
- 页内目录管理的是一项一项的数据。
-
目录页:
- 内部空间全部用于管理普通页。
- 每个目录项指向一个普通页,并存储该普通页中最小数据的键值。
- 与页内目录不同,目录页管理的级别是页,而页内目录管理的级别是行。
多个Page的组织
- 多个page间使用prev和next构成双向链表,同时通过普通页与目录页之间的组织。
- 即使为页目录建立了更高级别的页目录,但随着数据量的增加,页目录的数量也会不断增多。如果仅依赖线性遍历页目录来寻找目标Page,效率仍然较低。
- 可以不断在页目录之上再创建页目录,最终形成一个入口页目录。在查询数据时,可以从入口页目录开始不断查询页目录,最终找到目标数据所在的Page,然后再在该Page内部找到目标数据。
最终形成一颗胖而矮的树,整体结构如图:

这就是一颗 B+树,也是InnoDB的索引结构。
B+树的特点
- 只有叶子结点才用来保存数据,而非叶子结点只保存目录项,不保存数据。
- 非叶子结点page不保存数据,就可以存储更多的目录项,从而管理更多的叶子page。
- 叶子结点全部用链表关联起来,便于范围查找。
- 目录页只放各个下级Page的最小键值。
- 查找的时候,自顶向下找,只需要加载部分目录页到内存,即可完成算法的整个查找过程,大大减少了IO次数。
B+树和B树的区别
- B+树是B树的改进版。
- B树:所有结点既保存数据,又保存目录信息(Page指针)。
- B+树:
- 只有叶子结点存储数据,非叶子结点仅存储键值和Page指针。
- 叶子结点通过链表关联,便于范围查找,而B树没有这种设计。
- 非叶子结点不存储数据,可以用来存储更多的目录项,使得树变得更矮,减少IO次数,最终实现更高的效率。
聚簇索引 VS 非聚簇索引
-
MyISAM存储引擎:
- 索引结构同样是B+树,但它的叶子结点并不直接存储数据,而是存储数据的地址。
- 数据内容与索引结构是分离的。
- 这种用户数据与索引数据分离的索引方案,叫做 非聚簇索引。
-
InnoDB存储引擎:
- 索引结构是B+树,且叶子结点直接存储数据。
- 这种用户数据与索引数据存储在一起的索引方案,叫做 聚簇索引。
聚簇索引的优缺点
- 优点:
- 数据与索引存储在一起,查询效率高,尤其是范围查询。
- 缺点:
- 插入和更新操作需要维护索引结构,可能导致性能下降。
非聚簇索引的优缺点
- 优点:
- 数据与索引分离,插入和更新操作对索引影响较小。
- 缺点:
- 查询时需要额外访问数据文件,效率较低。
创建索引
常见索引分为:
MySQL默认会创建主键索引
- 主键索引(primary key)
- 唯一索引(unique)
- 普通索引(index)
- 全文索引(fulltext)–解决中子文索引问题。
主键索引
InnoDB主键索引的生成过程
当创建主键索引时,MySQL会按照以下步骤生成B+树结构:
(1)初始化
表被创建时,如果没有显式定义主键,InnoDB会隐式创建一个隐藏的主键(通常是一个6字节的自增字段)。
如果定义了主键,MySQL会为主键列创建B+树索引。
(2)插入数据
当插入一行数据时,MySQL会根据主键值将数据插入到B+树的合适位置。
如果B+树的节点已满,会触发 节点分裂:将节点一分为二,并将中间键值提升到父节点。
数据按照主键的顺序存储在叶子节点中。
(3)查询数据
当查询数据时,MySQL会从根节点开始,根据主键值逐层查找,直到定位到目标叶子节点。
由于B+树的高度较低,查询效率非常高。
(4)删除数据
当删除数据时,MySQL会从B+树中移除对应的叶子节点记录。
如果节点变得过空,可能会触发 节点合并:将相邻节点合并,以保持B+树的平衡。
值得注意的是在InnoDB 存储引擎中插入数据是会默认进行排序的。这种行为主要是由于 InnoDB存储引擎 的 聚簇索引 设计所导致的。
由于InnoDB存储引擎的数据结是B+树,而B+树又是聚簇索引
所以数据和索引存储在一起而他们又作为B+树的叶子节点,B+树为了保证平衡性和有序性,就会对新插入的数据按照主键进行排序。
创建主键的三种方式语法:
#第一种创建主键方式
#在创建表的时候,直接在字段名后指定 primary key
create table user1(id int primary key, name varchar(30));#第二种方式:
#在创建表的最后,指定某列或某几列为主键索引
create table user2(id int, name varchar(30), primary key(id));#第三种方式:
#创建表以后再添加主键
create table user3(id int, name varchar(30));
alter table user3 add primary key(id);
主键索引的特点
- 因为主键值的唯一性,查找效率最高
- 主键索引的列值不能为NULL
- 每个表只能有一个主键,但主键可以由多个列组成(复合主键),每个表只能有一个主键索引。
InnoDB存储引擎中的主键索引及特点
在InnoDB存储引擎中,主键索引是聚簇索引。
特点如下:
- 数据行按照主键的顺序物理存储。
- 因为物理存储的连续提升范围查找的速度,同时减少IO次数。查找速度飞快
- B+树的高度较低,查询时间复杂度为O(log n),效率非常高
- 查询主键时可以直接访问数据,无需额外的查找操作。
- 如果表没有显式定义主键,InnoDB会选择一个唯一的非空索引作为聚簇索引;如果没有这样的索引,InnoDB会隐式创建一个隐藏的主键。
MyISAM存储引擎中的主键索引
| 特性 | MyISAM 主键索引 | InnoDB 主键索引 |
|---|---|---|
| 索引类型 | 非聚簇索引 | 聚簇索引 |
| 数据存储位置 | 索引和数据分开存储(.MYI和.MYD文件) | 索引和数据存储在一起(.ibd文件) |
| 叶子节点存储内容 | 指向数据行的指针 | 完整的行数据 |
| 数据排序 | 数据按照插入顺序存储 | 数据按照主键顺序存储 |
| 插入性能 | 较高(数据追加到文件末尾) | 较低(需要维护B+树的有序性) |
| 查询性能 | 较低(需要额外查找数据文件) | 较高(直接访问数据) |
| 事务支持 | 不支持 | 支持 |
| 行级锁 | 不支持(表级锁) | 支持 |
总结
MyISAM存储引擎中的主键索引是 非聚簇索引,与InnoDB都是B+树,索引和数据分开存储,叶子节点存储指向数据行的指针。这种设计使得MyISAM在插入性能上有优势,但在查询性能、事务支持和并发写入方面存在不足。在选择存储引擎时,需要根据应用场景的需求权衡MyISAM和InnoDB的优缺点。
主键索引的性能优化
选择合适的主键:
- 主键应尽可能短且唯一。通常使用INT或BIGINT类型的主键,并配合AUTO_INCREMENT自动生成唯一值。
- 避免使用大字段作为主键:如果主键列是VARCHAR或TEXT等大字段类型,索引会占用更多空间,影响性能。
- 复合主键的使用:复合主键适用于需要多列唯一标识的场景,但会增加索引的复杂性。
主键索引的注意事项
- 主键的值一旦插入,通常不建议修改,因为修改主键可能会导致数据完整性问题。
- 如果表中有外键关联,修改主键可能会影响关联表的数据。
- 主键索引的选择对数据库性能有重要影响,应谨慎设计。
唯一索引
三种创建语法:
#第一种方式:
#在表定义时,在某列后直接指定unique唯一属性。
create table user4(id int primary key, name varchar(30) unique);#第二种方式:
#创建表时,在表的后面指定某列或某几列为unique
create table user5(id int primary key, name varchar(30), unique(name));#第三种方式:
#在修改表创建唯一索引
create table user6(id int primary key, name varchar(30));
alter table user6 add unique(name);
MyISAM存储引擎下的创建一个唯一索引工作原理
- 它会重新独立创建一个B+树(与主键索引的树一样为非聚簇索引树,只不过键值不同)并进行维护。
- 在主键索引存在的情况下,数据存储在 .MYD 文件中,而索引存储在 .MYI 文件中。无论是主键索引还是唯一索引,它们都存储指向 .MYD 文件中数据行的指针(即行偏移量)。
- 唯一索引会直接指向已经存储好的表数据,而不是通过主键索引间接查找数据。
- 当有数据变动时(插入或删除等)它需要同时维护更新多个已经创建的索引树
InnoDB存储引擎下的创建一个唯一索引的工作原理
- 它同样创建一个B+树,只不过是个辅助索引树。依赖于主键索引。
- 叶子节点存储内容:存储的是 主键值(Primary Key Value)。
- 唯一索引的B+树存储的是唯一列的值和对应的主键值,通过主键值在聚簇索引中查找实际的行数据。
所以通过辅助(普通)索引,找到目标记录,需要两遍索引:首先检索辅助索引获得主键,然后用主键到主索引中检索获得记录。这种过程,就叫做回表查询。
为何 InnoDB 针对这种辅助(普通)索引的场景,不给叶子节点也附上数据呢?因为那样太浪费空间了。
唯一索引的特点
- 索引值同样不能重复
- 一个表可以存在多个唯一索引
- 如果一个唯一索引上指定not null,等价于主键索引(也就是唯一索引允许一个null)
- 查找效率高
普通索引
语法(同样三种方式):
#第一种方式
#在表的定义最后,指定某列为索引
create table user8(id int primary key,name varchar(20),email varchar(30),index(name)
);#第二种方式
create table user9(id int primary key, name varchar(20), emailvarchar(30));alter table user9 add index(name); --创建完表以后指定某列为普通索引#第三种方式
#创建一个索引名为 idx_name1 的索引
create table user10(id int primary key, name1 varchar(20), emailvarchar(30));
create index idx_name on user10(name1);
普通索引的特点:
- 一个表中可以有多个普通索引,普通索引在实际开发中用的比较多
- 如果某列需要创建索引,但是该列有重复的值,那么我们就应该使用普通索引
- 普通索引 和 唯一索引 的创建过程几乎相同,主要区别在于唯一索引有 唯一性约束。
MyISAM存储引擎全文索引
当对文章字段或有大量文字的字段进行检索时,会使用到全文索引。MySQL提供全文索引机制,但是有要求,要求表的存储引擎必须是MyISAM,而且默认的全文索引支持英文,不支持中文。如果对中文进
行全文检索,可以使用sphinx的中文版(coreseek)
语法:
#第一种方式:(关键句FULLTEXT (title,body))
CREATE TABLE articles (id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,title VARCHAR(200),body TEXT,FULLTEXT (title,body)
)engine=MyISAM;#起全文索引名为idx_content:
CREATE TABLE articles (id INT AUTO_INCREMENT PRIMARY KEY,title VARCHAR(200),content TEXT,FULLTEXT INDEX idx_content (content)
);#第二种方式 在已有表上创建全文索引
ALTER TABLE articles
ADD FULLTEXT INDEX idx_title_content (title, content);
全文索引的使用:
使用 MATCH ... AGAINST 语法进行自然语言搜索
#示例:
SELECT * FROM articles
WHERE MATCH(content) AGAINST('database');
explain工具
可以用explain工具看是否使用到索引
mysql> explain SELECT * FROM articles WHERE MATCH (title,body) AGAINST
('database')\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: articles
type: fulltext
possible_keys: title
key: title <= key用到了title
key_len: 0
ref:
rows: 1
Extra: Using where
关键字段解析
- type: fulltext:表示查询使用了全文索引。
- possible_keys: title:表示查询可能使用的索引是 title。
- key: title:表示查询实际使用的索引名是 title。
- key_len: 0:对于全文索引,key_len 的值通常为 0,因为全文索引的计算方式与普通索引不同。
- rows: 1:表示 MySQL 预计需要扫描 1 行数据来返回结果。
- Extra: Using where:表示 MySQL 使用了 WHERE 条件来过滤数据。
查看索引
语法:
show keys from 表名;
mysql> show keys from goods\G
*********** 1. row ***********
Table: goods <= 表名
Non_unique: 0 <= 0表示唯一索引
Key_name: PRIMARY <= 主键索引
Seq_in_index: 1
Column_name: goods_id <= 索引在哪列
Collation: A
Cardinality: 0
Sub_part: NULL
Packed: NULL
Null:
Index_type: BTREE <= 以二叉树形式的索引
Comment:
1 row in set (0.00 sec)
show index from 表名;- (信息比较简略):
desc 表名;
删除索引
语法:
- 删除主键索引:
alter table 表名 drop primary key; - 其他索引的删除:
alter table 表名 drop index 索引名;索引名是show keys from表名中的Key_name字段 drop index 索引名 on 表名
索引创建原则
- 比较频繁作为查询条件的字段应该创建索引
- 唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件
- 更新非常频繁的字段不适合作创建索引
- 不会出现在where子句中的字段不该创建索引
其他概念
- 复合索引
- 索引最左匹配原则
- 索引覆盖
相关文章:
【MySQL | 六、索引特性(进一步理解)】
目录 索引的理解索引的作用MySQL与磁盘的IOPage单个Page的分类多个Page的组织B树的特点 B树和B树的区别聚簇索引 VS 非聚簇索引聚簇索引的优缺点非聚簇索引的优缺点 创建索引常见索引分为:主键索引InnoDB主键索引的生成过程(1)初始化…...
计算机网络高频(三)UDP基础
计算机网络高频(三)UDP基础 1.UDP的头部格式是什么样的?⭐ UDP 头部具有以下字段: 源端口(Source Port):16 位字段,表示发送方的端口号。目标端口(Destination Port):16 位字段,表示接收方的端口号。长度(Length):16 位字段,表示 UDP 数据报(包括头部和数据部…...
【测试开发】OKR 小程序端黑盒测试报告
【测试报告】OKR 小程序端 项目名称版本号测试负责人测试完成日期联系方式OKR 小程序端4.0马铭胜2025-03-2515362558972 1、项目背景 1.1 OKR 用户端 在如今这个快节奏的时代中,个人和组织的成长往往依赖于清晰、明确且意义深远的目标。然而,如何设定…...
HTTP 1.0和2.0 有什么区别?
HTTP 1.0和HTTP 2.0是互联网中用于数据传输的重要协议,两者在功能和性能上有显著差异。 以下是它们的主要区别: HTTP 1.0 的特点: 单一连接:每个请求需要独立连接,导致高延迟和资源浪费。文本传输:使用文…...
部署高可用PostgreSQL14集群
目录 基础依赖包安装 consul配置 patroni配置 vip-manager配置 pgbouncer配置 haproxy配置 验证 本文将介绍如何使用Patroni、Consul、vip-manager、Pgbouncer、HaProxy组件来部署一个3节点的高可用、高吞吐、负载均衡的PostgresSQL集群(14版本)&…...
JavaScript 对事件的反应机制
JavaScript 对事件的反应机制 JavaScript 对事件的反应机制是网页实现用户交互的核心,主要通过事件监听与处理函数实现对用户行为的响应。以下是关键要点解析: 一、事件机制基础 1. 事件的定义 事件是用户或浏览器在页面上的动作(如点击、…...
Vue3中keep-alive缓存组件应用场景。
文章目录 一、KeepAlive是什么?二、基本使用1.例子2.keep-alive使用 三、其他属性3.1 包含/排除3.2 最大缓存实例数3.3 缓存实例的生命周期 总结 一、KeepAlive是什么? 是一个内置组件,它的功能是在多个组件间动态切换时缓存被移除的组件实例…...
Pythonload JSON文件需要手动关闭吗?
在Python中使用 json 模块加载JSON文件时,通常不需要手动关闭文件。 例如,使用以下方式加载JSON文件: import json with open(data.json, r) as f: data json.load(f) 在上述代码中,使用 with 语句打开文件,它会在代码…...
SCI论文阅读指令(特征工程)
下面是一个SCI论文阅读特征工程V3.0,把指令输入大模型中,并上传PDF论文,就可以帮你快速阅读论文。 优先推荐kimi,当然DeepSeek、QwQ-32B等大语言模型也可以。测试了一下总结的还不错,很详细。 请仔细并深入地阅读所提…...
CosyVoice2在Windows系统上本地部署的详细步骤
CosyVoice2在Windows系统上本地部署的详细步骤: 下载源码并初始化: 确保你的设备上安装了Git。打开命令提示符(cmd),执行以下命令来克隆仓库:git clone --recursive https://github.com/FunAudioLLM/CosyVo…...
鸿蒙入门——ArkUI 跨页面数据同步和应用全局单例的UI状态存储AppStorage 小结(三)
文章大纲 引言一、AppStorage 应用全局的UI状态存储1、StorageProp和StorageLink装饰器建立联系2、StorageProp2.1、StorageProp使用规则2.2、StorageProp变量的传递/访问规则2.3、StorageProp支持的观察变化2.4、StorageProp 值初始化和更新 3、StorageLink3.1、StorageLink使…...
RabbitMQ 核心组件及功能详解
RabbitMQ 是一个开源的消息代理和队列服务器,其核心架构由以下关键组件构成: 一、核心组件架构 #mermaid-svg-mIHqbpvVt25Kpyl0 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-mIHqbpvVt25Kpyl0 .error-icon{fil…...
海思烧录工具HITool电视盒子刷机详解
HiTool是华为开发的一款用于海思芯片设备的刷机和调试工具,可对搭载海思芯片的机顶盒、智能电视等设备进行固件烧录、参数配置等操作。以下为你详细介绍: 功能用途 固件烧录:这是HiTool最主要的功能之一。它能够将下载好的适配固件文件烧录到…...
探秘 C++ 双星系统模型:实现快速值切换
在软件开发的世界里,有时我们会遇到需要频繁在两个值之间进行切换的场景。为了高效地处理这类情况,我们可以设计一个专门的类来实现这个功能。今天,我们就来详细介绍一个用 C 实现的双星系统模型类 Turner,它能够帮助我们轻松地在…...
AI 生成内容(AIGC):从文本到视频的完整流程
近年来,AI 生成内容(AIGC, AI-Generated Content) 迅速发展,从文本、图片到音频、视频,AI 在创意内容生成方面展现出了惊人的能力。AIGC 不仅提升了内容创作效率,还降低了成本,使得普通用户也能…...
使用VS2022编译CEF
前提 选择编译的版本 CEF自动编译,在这里可以看到最新的稳定版和Beta版。 从这里得出,最新的稳定版是134.0.6998.118,对应的cef branch是6998。通过这个信息可以在Build requirements查到相关的软件配置信息。 这里主要看Windows下的编译要…...
WebMvcConfigurer 的 addResourceLocations
在 Spring Boot 的 addResourceLocations 方法中,file: 是一个 URL 前缀,用于指示资源的位置是本地文件系统路径。以下是详细解释: 一、file: 的作用 file: 是 Java 中用于表示本地文件系统的 URL 前缀。它告诉 Spring Boot,资源…...
Pytorch学习笔记(八)Learn the Basics - Save and Load the Model
这篇博客瞄准的是 pytorch 官方教程中 Learn the Basics 章节的 Save and Load the Model 部分。 官网链接:https://pytorch.org/tutorials/beginner/basics/saveloadrun_tutorial.html 完整网盘链接: https://pan.baidu.com/s/1L9PVZ-KRDGVER-AJnXOvlQ?pwdaa2m …...
正则表达式基本语法和Java中的简单使用
先来个例子 public static final Pattern CHINESE_PATTERN Pattern.compile("[\\u4e00-\\u9fa5]"); / 检测字符串是否包含汉字 String text "Hello 世界"; boolean hasChinese CHINESE_PATTERN.matcher(text).find(); // 返回 true// 提取所有汉字 Mat…...
Mysql 回表查询,什么是回表查询,如何拒绝sql查询时的回表问题
文章目录 1. 什么是回表(回表查询)2. 如何减少回表3. 使用案例3.1 问题分析3.2 避免回表查询3.3 开始优化前言: 在继续讲解专栏内容之前,先学习几个概念,以便更好了解: 什么是聚簇索引什么是回表查询这篇文章详细分析 回表查询。聚簇索引的理解可以进入这篇文章:什么是聚…...
Spring Boot响应压缩配置与优化
一、核心工作机制 1.1 自动协商触发条件 Spring Boot的响应压缩功能基于智能协商机制,需同时满足以下条件方可触发: 客户端支持:请求头包含Accept-Encoding: gzip/deflate数据量阈值:响应体大小超过预设值(默认2KB&…...
常考计算机操作系统面试习题(三上)
目录 1. 为何要引入与设备的无关性?如何实现设备的独立性? 2. 页面置换先进先出算法 3. 页面置换先进先出算法,4个页框 4. 进程优先级调度算法 5. 短作业优先调度策略 6. 平均内存访问时间计算 7. 页式存储和段式存储的物理地址计算 …...
MATLAB 绘制空间分布图 方法总结
方法一:用mapshow函数 figure(1); hold on %% 添加陆地 land shaperead(landareas); mapshow(landareas.shp, FaceColor, [1 1 1], EdgeColor, [0.3 0.3 0.3],FaceAlpha,0)%% 添加站点 for i 1:size(mycmap,1)mapshow(lon(label i),lat(label i),displaytype,po…...
Maven工具学习使用(三)——坐标和依赖
坐标元素 Maven坐标是通过一些元素定义的,元素包括groupId、artifactId、version、packaging、classifier groupId:定义当前Maven项目隶属的实际项目。Maven项目和实际项目不是一对一的关系。一个实际的项目对应的Maven模块可能会有很多,比如SpringFramework。groupId不应…...
命令模式(Command Pattern)★
命令模式(Command Pattern) 如果任务有多个复杂的操作,可以使用命令模式将任务的操作封装为命令对象。这些命令对象可以在需要时按顺序执行,方便管理任务执行的逻辑和回滚操作。 示例: class Command { public:virtu…...
深度学习论文: Image Segmentation Using Text and Image Prompts
深度学习论文: Image Segmentation Using Text and Image Prompts Image Segmentation Using Text and Image Prompts PDF: https://arxiv.org/abs/2503.10622v1 PyTorch代码: https://github.com/shanglianlm0525/CvPytorch PyTorch代码: https://github.com/shanglianlm0525/…...
Docker+Ollama+Xinference+RAGFlow+Dify+Open webui部署及踩坑问题
目录 一、Xinference部署 (一)简介 (二)部署 (三)参数 (四)错误问题 (五)Xinference配置Text-embedding模型 (六)Xinference配…...
Axure项目实战:智慧城市APP(四)医疗信息(动态面板、选中交互应用)
亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! 课程主题:智慧城市APP医疗信息模块 主要内容:医疗信息模块原型设计与交互 应用场景:医疗信息行业 案例展示: 案例视频&…...
缓存设计模式
缓存设计模式(Cache Design Pattern)是一种用于存储和管理频繁访问数据的技术,旨在提高系统性能、降低数据库或后端服务的负载,并减少数据访问延迟。以下是几种常见的缓存设计模式,并用 Python Redis 进行示例代码实现…...
第十三章:优化内存管理_《C++性能优化指南》_notes
优化内存管理 一、内存管理基础概念二、自定义分配器三、智能指针优化重点知识代码示例:智能指针性能对比 四、性能优化关键点总结多选题设计题答案与详解多选题答案设计题示例答案(第1题) 一、内存管理基础概念 重点知识 动态内存分配开销…...
