深入解析MySQL索引:本质、分类、选择及使用原则
一、索引的本质
索引,作为数据库中的一种核心数据结构,其本质在于通过改变数据结构来加快查询效率。可以将索引理解为数据库中的一种“目录”或“路标”,它帮助数据库系统快速定位到需要查询的数据行,从而大大提高数据检索的速度。索引的本质就是一张特殊的表,前面是索引的关键字,后面是这个关键字存放的地址。当数据量庞大时,查找索引比查找全部内容要快得多,而且索引表数据量小,非常节省计算机资源。
索引的作用类似于字典中的查询方法。在字典中,我们可以通过字母顺序(聚集索引)或偏旁部首(非聚集索引)来快速找到需要的字词。同样,在数据库中,索引也提供了多种查询路径,使得数据库系统能够根据查询条件选择最优的查询策略。
二、索引的分类及使用
索引在MySQL中有多种分类方式,从功能逻辑、物理实现方式到作用字段个数等维度都可以进行划分。
1. 功能逻辑分类
- 普通索引:这是最基本的索引类型,没有任何限制条件,只是用于提高查询效率。它允许在定义索引的列中插入重复值和空值。
- 唯一索引:使用UNIQUE参数设置的索引,保证索引列的值是唯一的,但允许有空值。在一张数据表中可以有多个唯一索引。
- 主键索引:一种特殊的唯一性索引,它除了唯一性约束外,还要求索引列的值不能为空。一张表中最多只能有一个主键索引,通常是由主键字段自动创建的。
- 全文索引:用于全文搜索,可以在文本字段中进行关键词搜索。它适用于大段文本的搜索需求,但需要注意的是,在MySQL中,全文索引的支持情况因存储引擎而异(如InnoDB在5.6.4版本后才支持全文索引,且官方版本不支持中文分词)。
2. 物理实现方式分类
- 聚簇索引(Clustered Index):表中的数据行按照索引列的顺序存储,索引的叶节点直接存储数据行。聚簇索引决定了数据行的物理存储顺序,一个表只能有一个聚簇索引,通常是主键索引。
- 非聚簇索引(Non-clustered Index):表中的数据行存储与索引的顺序无关,索引的叶节点存储的是指向数据行的指针。一个表可以有多个非聚簇索引,查询时可能需要通过回表查询来获取完整的数据行。
3. 作用字段个数分类
- 单列索引:在表中的单个字段上创建的索引。单列索引可以是普通索引、唯一性索引或全文索引,只要保证索引只对应一个字段即可。
- 多列索引(联合索引):在表的多个字段组合上创建的索引。查询时,只有查询条件中使用了这些字段中的第一个字段时,索引才会被使用。使用组合索引时,需要遵循最左前缀原则。
索引的使用示例
假设我们有一个学生表(student),包含以下字段:学号(student_id)、姓名(name)、年龄(age)、班级(class)和成绩(score)。
- 为学号字段创建唯一索引:
sql复制代码 ALTER TABLE student ADD UNIQUE (student_id);
学号是学生表中的唯一标识,创建唯一索引可以确保学号的唯一性,并加快基于学号的查询速度。
- 为姓名和班级字段创建联合索引:
sql复制代码 ALTER TABLE student ADD INDEX idx_name_class (name, class);
当需要同时根据姓名和班级查询学生信息时,可以使用这个联合索引来提高查询效率。但需要注意的是,只有查询条件中包含了姓名字段时,这个索引才会被使用。
- 为成绩字段创建普通索引:
sql复制代码 ALTER TABLE student ADD INDEX idx_score (score);
当需要基于成绩进行排序或范围查询时,可以创建这个普通索引来提高查询效率。
三、为什么选择B+树作为索引的数据结构
在MySQL中,B+树被广泛用作索引的数据结构,其原因主要包括以下几个方面:
1. 性能高效
B+树非叶子节点不存储数据,只存储关键字和指向子节点的指针。这使得每个节点可以存储更多的关键字,从而在相同数据量的情况下,B+树的高度更低,磁盘I/O操作次数更少,查询速度更快。
2. 范围查询效率高
B+树的叶子节点通过双向链表相连,支持范围查询。这意味着只需要找到第一个符合范围条件的关键字,就可以通过指针一次性找到所有符合条件的关键字,而不需要进行多次查找。
3. 数据稳定性好
在B+树中,所有数据都存储在叶子节点,数据的插入、删除和更新等操作不会改变数据的相对位置,从而保证了数据的稳定性。这对于需要持久化存储的数据非常重要。
4. 适用于大量数据
B+树的阶数(m)可以根据需要进行设置,可以支持非常大的数据量。这意味着对于大规模数据存储和处理,B+树具有很好的适用性。
5. 索引和数据分离
在MySQL中,B+树的非叶子节点仅存储键值和子节点指针,而不存储数据。这样可以实现索引和数据的物理分离,提高了数据检索的效率。
与其他数据结构的比较
- B树:B树每个节点都存储数据和指针,导致每个节点能存储的关键字数量有限,树的高度可能较高,磁盘I/O操作次数较多。此外,B树不支持范围查询。
- 哈希索引:哈希索引使用哈希算法将键值转换为索引值,因此不支持范围查询和排序操作。同时,哈希索引的碰撞处理也会增加查询的复杂度。
- 红黑树:红黑树是一种自平衡二叉查找树,适用于内存中的数据结构。但在磁盘存储环境中,由于节点数量有限且树的高度可能较高,红黑树的性能并不如B+树。
四、不同存储引擎之间的差异
MySQL提供了多种存储引擎,每种存储引擎在数据存储方式、索引支持、事务处理等方面各具特点。以下是对几种常用存储引擎的详细比较:
1. InnoDB
- 特点:支持事务处理、行级锁和外键约束;采用聚簇索引,数据文件和索引文件放在一起。
- 索引支持:支持B+树索引和全文索引(5.6.4版本以后);聚簇索引的叶子节点存储的是整行记录。
- 适用场景:需要事务支持、高并发和数据一致性的场景,如银行系统、电商系统等。
2. MyISAM
- 特点:不支持事务处理和行级锁;采用非聚簇索引,数据文件和索引文件分开存放。
- 索引支持:支持B+树索引和全文索引;非聚簇索引的叶子节点存储的是指向数据行的指针。
- 适用场景:以读操作为主的场景,如日志分析、数据仓库等;数据不需要频繁更新的场景。
3. Memory
- 特点:数据存储在内存中,读写速度快;不支持持久化存储,MySQL重启或崩溃后数据丢失;支持表级锁。
- 索引支持:支持B+树索引和哈希索引。
- 适用场景:临时数据存储或需要极高读写速度的场景,如缓存系统。
4. Archive
- 特点:专为存储归档数据设计,支持高压缩比;仅支持INSERT和SELECT操作,不支持索引和事务。
- 适用场景:只需存储大量历史归档数据,几乎不需要更新的场景。
5. NDB(Clustered Storage Engine)
- 特点:用于MySQL集群,支持高可用性和高并发;数据分布式存储在多个节点。
- 适用场景:高可用、高性能需求的分布式场景。
在选择存储引擎时,应根据业务需求、数据特性、并发性能、数据安全性等因素进行权衡。例如,对于需要事务支持和高并发性能的场景,InnoDB是首选;而对于以读操作为主且数据不需要频繁更新的场景,MyISAM则更为合适。
五、索引的使用原则
索引的使用需要遵循一定的原则,以确保索引的有效性和高效性。以下是从操作系统原理、数据库原理、业务场景、功能点和底层原理等维度出发,总结的索引使用原则。
1. 操作系统原理维度
- 减少磁盘I/O操作:索引的使用应尽量减少磁盘I/O操作次数。B+树索引通过减少树的高度和节点大小,有效降低了磁盘I/O操作的次数,提高了查询效率。
- 利用内存缓存:操作系统中的内存缓存机制可以加速数据的读取速度。因此,在设计索引时,应考虑将常用的数据块缓存到内存中,以提高查询效率。
2. 数据库原理维度
- 选择合适的索引类型:根据查询需求选择合适的索引类型。例如,对于唯一性约束的字段,应使用唯一索引;对于需要范围查询的字段,应使用B+树索引等。
- 避免索引失效:在使用索引时,应避免一些导致索引失效的操作。例如,在索引列上进行运算、使用函数或类型转换等操作都会导致索引失效,从而影响查询效率。
3. 业务场景维度
- 根据查询频率选择索引列:对于经常作为查询条件的字段,应优先考虑创建索引。例如,在用户信息表中,用户ID和用户名等字段经常作为查询条件,因此应为其创建索引。
- 考虑数据更新频率:对于数据更新频繁的字段,应谨慎创建索引。因为索引的维护成本较高,频繁的数据更新会导致索引的频繁重建,从而影响数据库性能。
4. 功能点维度
- 加速排序和分组操作:对于需要排序或分组的字段,应创建索引以加速排序和分组操作。例如,在销售数据表中,按销售日期进行排序或按产品进行分组时,可以为销售日期和产品字段创建索引。
- 支持全文搜索:对于需要全文搜索的字段,应创建全文索引。例如,在新闻内容表中,可以对新闻标题和内容字段创建全文索引以支持全文搜索。
5. 底层原理维度
- 理解索引结构:在使用索引时,应理解索引的底层结构和工作原理。例如,B+树索引通过有序存储和双向链表相连支持范围查询和顺序访问等操作。
- 优化索引设计:根据索引的底层原理优化索引设计。例如,在创建联合索引时,应遵循最左前缀原则;在创建覆盖索引时,应确保索引包含了查询所需的所有列的数据等。
聚集索引与非聚集索引的区别及使用示例
区别:
- 数据存储方式:聚集索引的叶子节点存储的是表中的数据行,而非聚集索引的叶子节点存储的是指向数据行的指针。
- 物理存储顺序:聚集索引中表记录的排列顺序和索引的排列顺序一致,而非聚集索引的排列顺序不一致。
- 性能影响:聚集索引插入数据时速度较慢(因为需要重新排序数据页),但查询数据较快;非聚集索引查询时可能需要回表查询(即先通过索引找到数据行的指针,再通过指针访问数据行),但适用于不经常进行排序或范围查询的场景。
- 数量限制:一个表只能有一个聚集索引,但可以有多个非聚集索引。
使用示例(Java与MySQL结合):
假设我们有一个订单表(orders),包含以下字段:订单ID(order_id)、用户ID(user_id)、订单日期(order_date)、订单金额(order_amount)和订单状态(order_status)。
- 创建聚集索引(主键索引):
sql复制代码 ALTER TABLE orders ADD PRIMARY KEY (order_id);
在订单表中,订单ID是唯一的且经常作为查询条件,因此将其设为主键并创建聚集索引。这样可以加速基于订单ID的查询操作。
- 创建非聚集索引:
sql复制代码 ALTER TABLE orders ADD INDEX idx_user_date (user_id, order_date);
为了加速基于用户ID和订单日期的联合查询操作,我们为用户ID和订单日期字段创建了一个联合非聚集索引。注意这里遵循了最左前缀原则,即查询条件中必须包含用户ID字段才能使用这个索引。
Java代码示例:
以下是一个使用Java和JDBC连接MySQL数据库并执行查询操作的示例代码:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class IndexExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/mydatabase";
String username = "root";
String password = "password";
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
// 加载MySQL JDBC驱动程序Class.forName("com.mysql.cj.jdbc.Driver");
// 建立数据库连接connection = DriverManager.getConnection(url, username, password);
// 创建查询语句
String sql = "SELECT * FROM orders WHERE user_id = ? AND order_date = ?";preparedStatement = connection.prepareStatement(sql);preparedStatement.setInt(1, 1001); // 假设用户ID为1001preparedStatement.setDate(2, java.sql.Date.valueOf("2023-01-01")); // 假设订单日期为2023-01-01
// 执行查询resultSet = preparedStatement.executeQuery();
// 处理查询结果
while (resultSet.next()) {
int orderId = resultSet.getInt("order_id");
int userId = resultSet.getInt("user_id");java.sql.Date orderDate = resultSet.getDate("order_date");
double orderAmount = resultSet.getDouble("order_amount");
String orderStatus = resultSet.getString("order_status");System.out.println("Order ID: " + orderId);System.out.println("User ID: " + userId);System.out.println("Order Date: " + orderDate);System.out.println("Order Amount: " + orderAmount);System.out.println("Order Status: " + orderStatus);}} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();} finally {
// 关闭资源
try {
if (resultSet != null) resultSet.close();
if (preparedStatement != null) preparedStatement.close();
if (connection != null) connection.close();} catch (SQLException e) {e.printStackTrace();}}}
}
在这个示例中,我们使用了JDBC连接MySQL数据库,并执行了一个基于用户ID和订单日期的联合查询操作。由于我们已经在用户ID和订单日期字段上创建了联合非聚集索引,因此这个查询操作将能够高效地利用索引来加速查询速度。
六、总结
索引作为数据库中的一种核心数据结构,对于提高数据查询效率具有至关重要的作用。通过深入理解索引的本质、分类、选择及使用原则,我们可以更好地设计和优化数据库索引,从而提高数据库的性能和响应速度。在选择索引数据结构时,B+树凭借其高效的性能、稳定的数据结构和广泛的适用性成为了首选。同时,不同的存储引擎在索引支持、事务处理等方面各具特点,我们需要根据业务需求和数据特性进行权衡和选择。在使用索引时,我们应遵循一定的原则和方法来确保索引的有效性和高效性。通过合理的索引设计和优化策略,我们可以让数据库系统更加高效、稳定地运行。
相关文章:
深入解析MySQL索引:本质、分类、选择及使用原则
一、索引的本质 索引,作为数据库中的一种核心数据结构,其本质在于通过改变数据结构来加快查询效率。可以将索引理解为数据库中的一种“目录”或“路标”,它帮助数据库系统快速定位到需要查询的数据行,从而大大提高数据检索的速度…...
MYSQL的第一次
目录 前情提要 题目解析 连接并使用数据库 创建employees表 创建orders表? 创建invoices表?? ?查看建立的表 前情提要 需要下载mysql并进行配置,建议下载8.0.37,详情可见MySQL超详细安装配置教程(亲测有效)_mysql安装教程-CSDN博客 题目解析…...
机器学习笔记——常用损失函数
大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本笔记介绍机器学习中常见的损失函数和代价函数,各函数的使用场景。 热门专栏 机器学习 机器学习笔记合集 深度学习 深度学习笔记合集 文章目录 热门…...
谷粒商城学习笔记-13-配置git-ssh-配置代码免密提交
安装配置 git 1 、下载 git : https://git-scm.com 下载git客户端,右键桌面Git GUI/bash Here。进入bash 2 、配置 git ,进入 git bash # 配置用户名 git config --global user.name "username" //(名字,随意写)# …...
51单片机学习——静态数码管显示
1. 数码管介绍 LED数码管:数码管是一种简单、廉价的显示器,是由多个发光二极管封装在一起组成“8”字型的器件。 2. 数码管引脚定义 LED的阴极连接到一个端口上是共阴极连接,称为共阴极数码管。LED的阳极连接到一个端口上是共阳极连接&…...
Qt5 C++ TcpSocket 如何判断是服务主动断开tcp socket连接?
文章目录 实现思路示例代码代码解释主要功能和用法注意事项 在 Qt 5.9.9 的 C 开发中,使用 QTcpSocket 时,要判断是服务端主动断开 TCP Socket 连接,可以通过处理 QTcpSocket 的 disconnected 信号,结合 QTcpSocket 的状态以及…...
UEFI Spec 学习笔记---9 - Protocols — EFI Loaded Image
本节定义EFI_LOADED_IMAGE_PROTOCOL和 EFI_LOADED_IMAGE_DEVICE_PATH_PROTOCOL。这些协议分别描述了已加载到内存中的映像,并指定了PE/COFF映像通过EFI引导服务LoadImage()加载 时使用的设备路径。这些描述包括 load image 的源、映像在内存中的当前位置、为image分…...
Deepseek 与 ChatGPT:AI 浪潮中的双子星较量
引言 在人工智能飞速发展的当下,AI 语言模型成为了人们关注的焦点。Deepseek 与 ChatGPT 作为其中的佼佼者,各自展现出独特的魅力,引领着 AI 技术的发展潮流。今天,就让我们深入探讨这两款模型,看看它们在 AI 领域中是…...
open-webui安装
docker安装openwebui 拉取镜像 docker pull ghcr.io/open-webui/open-webui:maindocker images启动 docker run -d -p 8346:8080 --name open-webui ghcr.io/open-webui/open-webui:maindocker ps查看端口占用 lsof -i:8346访问地址 http://ip:port http://127.0.0.1:8346...
docker 安装jenkins
使用docker 容器安装jenkins比较方便,但是细节比较重要,这里实战安装了一遍,可用: 拉取最新的jenkins镜像 docker pull jenkins/jenkins 如果没有翻墙的话,可以会有下面的报错: Error response from dae…...
前端利器:DateUtils 日期时间工具深度剖析
序言 在前端开发中,日期和时间的处理是一个常见且重要的任务。从格式化日期展示到复杂的日期计算,每一个环节都需要精确和高效的代码支持。今天,我们就来深入探讨一个精心打造的前端日期时间工具类 DateUtils,它涵盖了从基础的日…...
Denoising Diffusion Restoration Models论文解读
论文要点 恢复的线性逆问题可以使用预训练的DDPM完成:1. 将降质矩阵使用SVD,得到分解矩阵;2. 使用分解矩阵将图像投影到降质类型间共享的谱空间;3. 谱空间中执行DDPM。 评价 同Track的方法同样很多,比如后续的DDNM、…...
【Windows API】SetFilePointerEx函数用法介绍
目录 一、函数概述 二、函数原型与参数解析 1. hFile(文件句柄) 2. liDistanceToMove(移动距离) 3. lpNewFilePointer(新指针位置) 4. dwMoveMethod(移动基准点) 三、返回值与…...
uniapp uni.request重复请求处理
类似这种切换tab时,如果操作很快并且网络不太好,就出现数据错乱,在网上查了一圈,有一个使用uview拦截处理的,但是原生uni.requse没有找到详细的解决办法,就查到使用 abort 方法,我自己封装了一个…...
unity学习47:寻路和导航,unity2022后版本如何使用 Navmesh 和 bake
目录 1 寻路和导航对移动的不同 1.1 基础的移动功能 1.1.1 基础移动 1.1.2 智能导航寻路 1.1.3 智能导航寻路还可以 2 如何实现这个效果? 2.1 通过地图网格的形式 2.1.1 警告信息 the static value has been deprecated的对应搜索 2.1.2 新的navigation ba…...
Windows安装node.js详细教程
一、什么是node.js Node.js 是一个基于 Chrome V8 引擎的javascript运行环境。 Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型。 Node 是一个让 JavaScript 运行在服务端的开发平台,它让javascript成为与PHP、Python等服务端语言平起平坐的脚步语言。 由 Rya…...
大模型领域常见的专业术语和关键词及简要解释
现在大语言模型非常火热,特别是deepseek,想要了解、学习、应用、设计开发大模型,则我们需要先知道大模型邻域都包含哪些方面,以及在大模型领域的各个方面,都有哪些常见的专业术语和关键词。 以下我们从大模型领域的模型架构、训练方法到优化技术、应用和伦理问题等多个方…...
单细胞转录组画小提琴VlnPlot只显示需要类型细胞
探序基因肿瘤研究院 整理 在R语言中,单细胞转录组数据画小提琴图中,我们如果想只展示出需要的特定细胞类型,可以把这需要展示的细胞类型单独构建成一个Seurat对象,再画图。 例如我们在Seurat对象中的meta.data表格中,…...
UE 播放视频
一.UI播放视频 1.导入视频文件至工程文件夹 2.文件夹内右健选择Media -> File Meida Source创建testFileMeidaSource文件。 编辑FilePath为当前视频 3.右键->Media->Media Player 创建testMediaPlayer文件 4.右键创建testMediaTexture。编辑MediaPlayer设置testMedia…...
当pcie设备变化时centos是否会修改网络设备的名称(AI回答)
当pcie设备变化时centos是否会修改网络设备的名称 在CentOS(以及其他基于Linux的操作系统)中,网络接口的命名通常遵循特定的规则,尤其是在使用PCIe设备(如网络适配器)时。网络接口的命名通常基于设备的物理…...
SpringSecurity基于配置方法控制访问权限:MVC匹配器、Ant匹配器
Spring Security 是一个功能强大且高度可定制的身份验证和访问控制框架。在 Spring Security 中,可以通过配置方法来控制访问权限。认证是实现授权的前提和基础,在执行授权操作前需要明确目标用户,只有明确目标用户才能明确它所具备的角色和权…...
《养生》(二)
一、基础生活调整 1.作息规律 固定每天7-8小时睡眠,尽量22:30前入睡,晨起后拉开窗帘晒太阳5分钟,调节生物钟 2.饮食优化 三餐定时,每餐细嚼慢咽20次以上,优先吃蔬菜和蛋白质(如鸡蛋、豆腐&#x…...
本地部署MindSearch(开源 AI 搜索引擎框架),然后上传到 hugging face的Spaces——L2G6
部署MindSearch到 hugging face Spaces上——L2G6 任务1 在 官方的MindSearch页面 复制Spaces应用到自己的Spaces下,Space 名称中需要包含 MindSearch 关键词,请在必要的步骤以及成功的对话测试结果当中 实现过程如下: 2.1 MindSearch 简…...
STM32 看门狗
目录 背景 独立看门狗(IWDG) 寄存器访问保护 窗口看门狗(WWDG) 程序 独立看门狗 设置独立看门狗程序 第一步、使能对独立看门狗寄存器的写操作 第二步、设置预分频和重装载值 第三步、喂狗 第四步、使能独立看门狗 喂狗…...
Ansys Motor-CAD:热分析
您好,汽车迷: 在这篇博客中,我将讨论如何使用 Ansys Motor-CAD 中的热物理模型对 IPM 电机进行热分析。我展示了可以应用的各种冷却系统,并演示了一些计算方法,包括稳态、简单瞬态和占空比。 热物理和设置 选择热物理…...
Swagger 转 Word 技术方案
项目概述 本项目旨在提供一种便捷的工具,将 Swagger API 文档转换为 Word 文档,方便开发人员和团队进行文档管理和分享。通过简单的配置和操作,用户可以快速生成包含 API 接口信息、请求参数、返回参数等内容的 Word 文档。 技术架构 本项目基于 Java 开发,采用 Spring …...
对CSS了解哪些?
CSS(Cascading Style Sheets,层叠样式表)是用来描述HTML文档外观和布局的语言。以下是对CSS的常见了解范围: 1. CSS 基础 选择器:如通用选择器 (*)、类型选择器、类选择器 (.class)、ID选择器 (#id)、后代选择器、伪类…...
使用 Docker-compose 部署 MySQL
使用 Docker Compose 部署 MySQL 本文将详细指导如何使用 docker-compose 部署 MySQL,包括基本配置、启动步骤、数据持久化以及一些高级选项。通过容器化部署 MySQL,你可以快速搭建一个隔离的数据库环境,适用于开发、测试或小型生产场景。 关…...
【C语言】指针(5)
前言:上篇文章的末尾我们使用了转移表来解决代码冗余的问题,那我们还有没有什么办法解决代码冗余呢?有的这就是接下来要说的回调函数。 往期文章: 指针1 指针2 指针3 指针4 文章目录 一,回调函数二,qsort实现快速排序1…...
go~为什么会有json.Number这种类型存在
解决 JSON 数值类型的不确定性 在 JSON 格式里,数值类型没有明确区分整数和浮点数,一个数值可能是整数(如 123),也可能是浮点数(如 123.45)。而在 Go 语言中,整数(如 in…...
Jmeter连接数据库、逻辑控制器、定时器
Jmeter直连数据库 直接数据库的使用场景 直连数据库的关键配置 添加MYSQL驱动Jar包 方式一:在测试计划面板点击“浏览”按钮,将你的JDBC驱动添加进来 方式二:将MySQL驱动jar包放入到lib/ext目录下,重启JMeter 配置数据库连接信…...
DeepSeek智能测试助手:分类+推理+导出一站式工具
前言 测试开发工程师在日常工作中需要处理大量测试文档,并且这些文档需要被高效分类、清洗和管理,同时结合强大的 AI 推理能力(如 DeepSeek 模型)进行智能化处理和分析。为此,我们开发了一款基于 PyQt5 的 GUI 工具&a…...
20250220找回Ubuntu22.04中丢失的文件管理器
20250220找回Ubuntu22.04中丢失的文件管理器 2025/2/20 18:05 在Ubuntu20.04.6中 生产服务器上 强制安装deb安装包的时候,把 桌面显示搞丢了。 Ubuntu的桌面用得少,但是没有还是挺不方便的,一通操作,桌面回来了。还是有很多/不少功…...
IMX6ULL的公板的以太网控制器(MAC)与物理层(PHY)芯片(KSZ8081RNB)连接的原理图分析(包含各引脚说明以及工作原理)
目录 什么叫以太网?它与因特网有何区别?公板实现以太网的原理介绍(MII/RMII协议介绍)公板的原理图下载地址公板中IMX6ULL处理器与MAC(以太网控制器)有关的原理图IMX6ULL处理器的MAC引脚说明1. **ENET1_TX_DATA0**2. **ENET1_TX_DATA1**3. **ENET1_TX_EN*…...
一周学会Flask3 Python Web开发-request请求对象与url传参
锋哥原创的Flask3 Python Web开发 Flask3视频教程: 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili request请求对象封装了从客户端发来的请求报文信息,我们可以从中获取所有数据。 request对象包含的常用属性&…...
2024年国赛高教杯数学建模C题农作物的种植策略解题全过程文档及程序
2024年国赛高教杯数学建模 C题 农作物的种植策略 原题再现 根据乡村的实际情况,充分利用有限的耕地资源,因地制宜,发展有机种植产业,对乡村经济的可持续发展具有重要的现实意义。选择适宜的农作物,优化种植策略&…...
WEB前端将指定DOM生成图片并下载最佳实践(html2canvas)
前言: html2canvas 是一个 JavaScript 库,其主要作用是将 HTML 元素或其部分内容渲染为 Canvas 图像。通过它,开发者可以将网页中的任意 DOM 元素(包括文本、图片、样式等)转换为图片格式(如 PNG 或 JPEG&…...
C# 十六进制字符串转换为十进制
在 C# 中,将十六进制(Hexadecimal)字符串转换为十进制(Decimal)整数非常简单。以下是几种常见的方法: 方法 1: 使用 Convert.ToInt32 Convert.ToInt32 方法可以直接将十六进制字符串转换为十进制整数。 示…...
第4章 信息系统架构(三)
4.3 应用架构 应用架构的主要内容是规划出目标应用分层分域架构,根据业务架构规划目标应用域、应用组和目标应用组件,形成目标应用架构逻辑视图和系统视图。从功能视角出发,阐述应用组件各自及应用架构整体上,如何实现组织的高阶…...
Qt 保留小数点 固定长度 QString 格式化
QString的arg()函数格式化输出double类型数值,包括fieldWidth、fmt、prec和fillChar参数的作用。示例代码展示了如何设置精度和填充字符,以及字段宽度的影响。文中提到,当fieldWidth小于实际长度时,前面的填充不会被截断。此外&am…...
亲测可用,IDEA中使用满血版DeepSeek R1!支持深度思考!免费!免配置!
作者:程序员 Hollis 之前介绍过在IDEA中使用DeepSeek的方案,但是很多人表示还是用的不够爽,比如用CodeChat的方案,只支持V3版本,不支持带推理的R1。想要配置R1的话有特别的麻烦。 那么,今天,给…...
AI训练中的常用指令
以下是一些常用于深度学习训练的 Linux 指令,可以帮助你高效管理和执行训练任务: 文件管理 查看当前目录内容:ls进入目录:cd 路径/到/目录创建新目录:mkdir 新目录名称删除文件或目录: 删除文件ÿ…...
汽车同轴供电(PoC)电感器市场报告:未来几年年复合增长率CAGR为14.3%
汽车同轴供电(PoC)系统旨在通过同轴电缆传输电力和数据。 该技术适用于各种汽车应用,如摄像头系统、传感器和其他需要通过单根电缆传输电力和数据的车载设备。 汽车 PoC 系统中的电感器有多种用途,包括能量存储:电感器…...
C++中间件DDS介绍
C DDS 库简介 DDS(Data Distribution Service) 是一种用于实时分布式系统通信的中间件标准,由 OMG(Object Management Group) 提出。它是一种发布/订阅(Publish/Subscribe)模式的数据通信框架&…...
强化学习笔记
强化学习的总体目标:寻找最优策略。 关键名词 智能体(Agent) 状态(State):智能体相对于环境的状态 s ∈ S s∈S s∈S 状态空间(State space):把所有状态放在一起&…...
【个人记录】openEuler安装K3S并配置为GPU节点
前言 国内网络环境特殊,在线安装比较麻烦,K3S采用离线安装方式进行部署。 安装整体思路是: 安装GPU驱动安装CUDA工具安装nvidia容器运行时安装K3S设置K3S使用GPU 基础环境 采用All In One方式(其实只有一张GPU卡)部…...
SpringAI系列 - ToolCalling篇(二) - 如何设置应用侧工具参数ToolContext(有坑)
目录 一、引言二、集成ToolContext示例步骤1: 在`@Tool`标注的工具方法中集成`ToolConext`参数步骤2:`ChatClient`运行时动态设置`ToolContext`参数三、填坑一、引言 在使用AI大模型的工具调用机制时,工具参数都是由大模型解析用户输入上下文获取的,由大模型提供参数给本地…...
Linux系统中常见的词GNU是什么意思?
GNU 是 “GNU’s Not Unix” 的递归缩写,它是一个自由软件项目,旨在创建一个完全自由的操作系统。这个名字反映了GNU项目的核心理念:它试图创建一个类Unix的系统,但不是Unix本身。 GNU 项目由 理查德斯托曼(Richard S…...
Revit API:对元素过滤的三点思考
一、为什么要对元素进行过滤? 提高效率:Revit模型可能包含成千上万的元素,直接对所有元素进行操作会非常耗时。通过过滤,可以只选择需要处理的元素,从而提高代码的执行效率。 精准控制:通过过滤࿰…...
计算机毕业设计Python农产品推荐系统 农产品爬虫 农产品可视化 农产品大数据(源码+LW文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...