目录

前言

MySQL索引

一、概述

二、索引分类

(一)按功能特性分类

(二)按存储方式分类

(三)按数据结构分类

(四)按索引字段数量分类

三、索引的优缺点

(一)优点

(二)缺点

四、普通索引的使用

(一)使用规则

(二)创建索引

建表时创建

建表后添加

(三) 查看索引

(四)删除索引

(五)验证查询是否使用索引

(六)索引使用建议

五、其它索引的使用

(一)唯一索引

(二)复合索引

(三)主键索引

慢SQL分析与优化

一、定义

二、常见原因

三、影响

四、如何发现慢SQL

(一)开启慢查询日志

(二)重启MySQL服务

(三)查看慢日志文件路径

(四)分析慢查询日志

五、如何优化慢SQL

(一)优化查询语句

(二)优化数据库结构

(三)调整数据库配置

(四) 硬件和系统优化

(五)使用性能分析工具

六、优化示例

(一)对索引字段使用函数导致索引失效

优化前

问题分析

优化后

优化说明

验证方法

(二)模糊查询导致索引失效

优化前

问题分析

优化后

优化说明

验证方法

(三)隐式类型转换导致索引失效

优化前

问题分析

优化后

优化说明

验证方法

(四)联合索引未遵循最左前缀原则

优化前

问题分析

优化后

优化说明

验证方法

优化案例

一、案例背景

二、优化过程

(一)问题定位

开启慢查询日志

使用 EXPLAIN 分析执行计划

(二)优化方案

索引优化

SQL 改写

归档历史数据

(三)最终优化组合

三、优化总结

锁机制与并发优化

一、事务与锁机制

(一)SQL 语句类型

(二)事务

(三)ACID 特性

二、锁机制

(一)全局锁

介绍

作用

示例

解释

(二)表级锁

介绍

作用

示例

解释

(三)行级锁

介绍

作用

示例

解释

(四)元数据锁

介绍

作用

示例

解释

三、锁机制在MySQL优化中的价值


前言

  • 前面几篇博客已经详细介绍了MySQL的基本使用查询、建表、备份、主从同步、读写分离、分库分表),感兴趣的可以点击主页查看。

MySQL索引

一、概述

  • 索引是数据库中用于提高查询效率的数据结构,类似于书籍的目录
  • 通过索引,数据库可以快速定位到目标数据避免全表扫描,从而显著提升查询性能。

二、索引分类

(一)按功能特性分类

索引类型功能描述
普通索引最基本的索引类型,仅用于加速查询,无唯一性约束
唯一索引保证索引列的值唯一允许存在 NULL 值。
主键索引特殊的唯一索引不允许 NULL 值,每个表只能有一个主键索引

注:本文主要介绍普通索引的使用

(二)按存储方式分类

索引类型功能描述
聚簇索引

数据行与索引存储在一起,索引顺序即数据物理存储顺序

InnoDB 中主键默认为聚簇索引。

非聚簇索引索引与数据分开存储,索引中仅保存指向数据行的指针。

注:InnoDB 存储引擎中,聚簇索引即为主键索引,非聚簇索引也称为二级索引

(三)按数据结构分类

索引类型功能描述
B-Tree 索引MySQL 默认索引类型,支持范围查询和排序操作,适用于大多数场景。
哈希索引基于哈希表实现,仅支持等值查询,不支持范围查询,Memory 引擎支持。
全文索引用于对大文本字段进行关键词搜索,支持自然语言查询,InnoDB 和 MyISAM 支持。
空间索引用于地理空间数据类型(如 POINT、POLYGON),支持空间查询,MyISAM 支持。

(四)按索引字段数量分类

索引类型功能描述
单列索引仅作用于单个字段,适用于简单查询条件。
复合索引(组合索引)作用于多个字段,遵循“最左前缀”原则,适用于多条件查询。

最左前缀原则:复合索引中,查询条件必须从索引的最左侧字段开始匹配,才能有效使用索引

三、索引的优缺点

(一)优点

列举描述
提高查询速度通过索引结构快速定位数据,显著减少查询时间。
减少数据扫描量避免全表扫描,降低服务器负载。
避免排序和临时表索引本身有序,支持 ORDER BY 和 GROUP BY减少额外排序开销
优化磁盘 I/O将随机 I/O 转换为顺序 I/O,提高磁盘访问效率。

(二)缺点

列举描述
降低更新效率插入、更新、删除操作需同步维护索引,增加写入开销
占用额外空间索引文件占用磁盘空间,复合索引或大表索引空间开销显著。
对低选择性字段效果差字段重复值多时,索引过滤效果不明显,甚至可能不如全表扫描。
小表查询收益低数据量较小时,全表扫描成本更低,索引优势不明显。

四、普通索引的使用

(一)使用规则

规则说明

索引数量

一个表中可以创建多个普通索引
字段类型支持为任意数据类型的字段创建索引。
值约束字段值允许重复,也允许为 NULL
使用场景通常在为 WHERE 子句提供条件的字段上创建索引,以提高查询效率。
索引标志普通索引在表结构中标志为 MUL(Multiple Key)。

(二)创建索引

建表时创建
CREATE TABLE 库.表(
字段列表,
INDEX(字段名),
INDEX(字段名)
);
# 创建表时添加索引
CREATE TABLE users (id INT PRIMARY KEY,name VARCHAR(50),email VARCHAR(100),INDEX idx_name (name)
);
建表后添加
CREATE INDEX idx_name ON test.users(name)

(三) 查看索引

DESC 库名.表名;  #查看表结构(简略)
SHOW INDEX FROM 表名\G # 查看索引详细信息#示例
DESC test.users;  
SHOW INDEX FROM users\G

(四)删除索引

DROP INDEX 索引名 ON 库.表;#示例
DROP INDEX idx_name ON test.users;

(五)验证查询是否使用索引

EXPLAIN SELECT 查询语句;#示例
EXPLAIN SELECT * FROM test.users WHERE name = 'test';
  • 关键字段说明:
    • type:访问类型,refrangeconst 表示使用索引,ALL 表示全表扫描。
    • key:实际使用的索引名称
    • rows:预估扫描行数,越少越好
    • Extra:附加信息,如 Using index 表示覆盖索引,Using filesort 表示需额外排序。

(六)索引使用建议

  • 选择性高字段优先建立索引(如用户ID、订单号)。
  • 避免低基数字段建索引(如性别、状态字段)。
  • 联合索引字段顺序应遵循查询条件顺序
  • 避免在索引列上使用函数或表达式,会导致索引失效。
  • 定期分析和优化索引删除冗余或无效索引。

五、其它索引的使用

  • 仅介绍创建示例其它部分类似普通索引的使用

(一)唯一索引

CREATE UNIQUE INDEX email_unique  ON users(email);

(二)复合索引

CREATE INDEX name_age ON users(name, age);

(三)主键索引

ALTER TABLE users ADD PRIMARY KEY (id);

慢SQL分析与优化

一、定义

  • 慢SQL是指执行时间超过预设阈值的SQL语句,这类查询通常执行效率低下,可能导致数据库响应变慢、资源占用过高,进而影响整个系统的稳定性和用户体验。
  • 在MySQL中,默认将执行时间超过10秒的SQL定义为慢SQL。

二、常见原因

原因说明
查询未使用索引或索引失效查询未利用索引索引因某些原因失效,导致全表扫描
查询返回数据量过大查询结果集过大,增加网络传输和内存消耗
SQL语句写法不合理如使用了不合理的JOIN、子查询等,导致查询效率低下
数据库表结构设计不合理表结构设计不当,如字段类型选择不当、表关联关系复杂等
数据库参数配置不当数据库参数设置不合理,如缓冲区大小、连接数等
服务器硬件资源不足CPU、内存、磁盘IO等硬件资源不足,影响查询性能


三、影响

影响

说明

系统响应变慢,用户体验下降

查询响应时间延长用户等待时间增加

数据库连接池耗尽,导致系统崩溃

慢SQL占用连接时间过长,导致连接池资源耗尽

增加数据库服务器负载,影响其他业务

数据库服务器资源被大量占用,影响其他业务的正常运行

四、如何发现慢SQL

(一)开启慢查询日志

通过修改MySQL配置文件my.cnf使用命令行参数开启慢查询日志功能,记录执行时间超过设定阈值的SQL语句。

  • 修改配置文件my.cnf
    [mysqld]
    slow_query_log = 1              # 开启慢查询日志
    long_query_time = 1             # 设置阈值(单位:秒)
    log_queries_not_using_indexes = 1  # 记录未使用索引的查询
  • 命令行动态设置
    #登录MySQL后执行SET GLOBAL slow_query_log = 'ON';
    SET GLOBAL long_query_time = 1;
    SET GLOBAL log_queries_not_using_indexes = 'ON';

(二)重启MySQL服务

systemctl restart mysqld

(三)查看慢日志文件路径

SHOW VARIABLES LIKE 'slow_query_log_file';

(四)分析慢查询日志

  • 使用mysqldumpslow工具对慢查询日志进行分析,找出执行时间最长的SQL语句。
    mysqldumpslow -s t -t 10 /var/lib/mysql/mysql-slow.log  
    # 按时间排序,显示前10条慢SQL
    # -s t 按查询时间排序
    # -t 10 显示前10条记录
    

五、如何优化慢SQL

(一)优化查询语句

  • 使用合适的索引:确保查询条件中的字段有索引,并避免索引失效。
  • 避免全表扫描:尽量使用索引字段进行查询,减少扫描的数据量。
  • 优化JOIN操作:确保JOIN字段有索引避免使用复杂的嵌套JOIN
  • 限制返回数据量:使用LIMIT限制返回的记录数,避免返回过多数据。

(二)优化数据库结构

  • 合理设计表结构避免冗余字段,合理划分表结构。
  • 使用合适的数据类型:选择合适的数据类型,减少存储空间和I/O开销。
  • 归档历史数据定期清理或归档旧数据,减少表的数据量。

(三)调整数据库配置

  • 调整缓冲区大小:如innodb_buffer_pool_sizequery_cache_size等。
  • 优化连接数:根据系统负载合理设置最大连接数max_connections
  • 启用查询缓存:对于读多写少的应用,可以开启查询缓存

(四) 硬件和系统优化

  • 升级硬件资源增加CPU、内存、使用SSD等,提升系统性能。
  • 优化操作系统参数:如文件描述符限制、内核参数等。

(五)使用性能分析工具

  • EXPLAIN分析SQL的执行计划,查看是否使用了索引。
  • SHOW PROFILE:分析SQL执行过程中的资源消耗。
  • Performance Schema:MySQL的性能分析工具,可以详细监控SQL执行情况。

六、优化示例

(一)对索引字段使用函数导致索引失效

优化前
SELECT * FROM orders WHERE DATE(create_time) = '2025-07-01';
问题分析
  • create_time 字段使用了 DATE() 函数,导致 MySQL 无法使用该字段上的索引
  • 结果是全表扫描,查询性能差,尤其是在数据量大的情况下。
优化后
SELECT * FROM orders 
WHERE create_time >= '2025-07-01' AND create_time < '2025-07-02';
优化说明
  • 通过将函数操作转换为范围查询,避免对索引字段进行计算。
  • 使 MySQL 能够利用 create_time 字段上的索引,显著减少扫描行数
验证方法
EXPLAIN SELECT * FROM orders WHERE create_time >= '2025-07-01' AND create_time < '2025-07-02';
  • 查看 type 是否为 rangekey 是否为 create_time 的索引名。
  • 确认 rows 字段值大幅减少,表明索引生效。

(二)模糊查询导致索引失效

优化前
SELECT * FROM users WHERE name LIKE '%青竹%';
问题分析
  • 使用了前模糊查询%青竹%),导致 MySQL 无法使用 name 字段上的索引
  • 结果是全表扫描,查询效率低。
优化后
SELECT * FROM users WHERE name LIKE '青竹%';
优化说明
  • 前模糊查询改为后模糊查询(青竹%),使 MySQL 能够利用 name 字段上的索引
  • 适用于以特定前缀开头的搜索场景。
验证方法
EXPLAIN SELECT * FROM users WHERE name LIKE '青竹%';
  • 查看 type 是否为 rangekey 是否为 name 的索引名
  • 确认 rows 字段值减少,表明索引生效。

(三)隐式类型转换导致索引失效

优化前
SELECT * FROM users WHERE phonenumber = 15212341234;
问题分析
  • phonenumber 字段为字符串类型,但查询时使用了数字类型,导致 MySQL 进行隐式类型转换
  • 结果是索引失效全表扫描
优化后
SELECT * FROM users WHERE phonenumber = 15212341234;
优化说明
  • 将查询条件中的数字类型改为字符串类型避免隐式类型转换
  • 使 MySQL 能够利用 phone 字段上的索引。
验证方法
EXPLAIN SELECT * FROM users WHERE phonenumber = 15212341234;
  • 查看 type 是否为 refkey 是否为 phonenumber 的索引名。
  • 确认 rows 字段值减少,表明索引生效。

(四)联合索引未遵循最左前缀原则

优化前
SELECT * FROM users WHERE age = 24;
问题分析
  • 存在联合索引 name_age(name, age),但查询条件中未包含 name 字段。
  • 结果是索引失效全表扫描
优化后
SELECT * FROM users WHERE name = '青竹' AND age = 24;
优化说明
  • 在查询条件中加入 name 字段,遵循联合索引的最左前缀原则
  • 使 MySQL 能够利用 name_age 联合索引
验证方法
EXPLAIN SELECT * FROM users WHERE name = '青竹' AND age = 24;
  • 查看 type 是否为 refkey 是否为 name_age
  • 确认 rows 字段值减少,表明索引生效

优化案例

一、案例背景

  • 电商平台随着业务的快速发展,订单量不断攀升。
  • 在日常运营中,订单统计报表查询功能频繁被使用,用于生成各类销售数据报表,为运营决策提供数据支持。
  • 然而,随着订单数据量的急剧增长,当订单表中的数据量达到 600 万条时,报表查询的性能问题逐渐凸显。
  • 具体表现为,以下用于统计用户订单总额和订单数量的 SQL 查询语句,执行时间超过 10 秒
    SELECT customer_id,COUNT(*) AS order_count,SUM(order_amount) AS total_order_amount
    FROM orders 
    WHERE create_time BETWEEN '2024-01-01' AND '2024-12-31'AND status IN (1, 2, 3)
    GROUP BY customer_id 
    ORDER BY total_order_amount DESC 
    LIMIT 100;

二、优化过程

(一)问题定位

开启慢查询日志
  • 通过修改 MySQL 配置文件 my.cnf 或使用命令行参数,开启慢查询日志功能,记录执行时间超过设定阈值的 SQL 语句。
  • 修改配置文件 my.cnf
    [mysqld]
    slow_query_log = 1              # 开启慢查询日志
    slow_query_log_file = /var/log/mysql/slow.log  # 指定日志文件路径
    long_query_time = 1             # 设置阈值(单位:秒)
    log_queries_not_using_indexes = 1  # 记录未使用索引的查询
  • 命令行动态设置
    #登录 MySQL 后执行SET GLOBAL slow_query_log = 'ON';
    SET GLOBAL long_query_time = 1;
    SET GLOBAL log_queries_not_using_indexes = 'ON';
使用 EXPLAIN 分析执行计划
EXPLAIN 
SELECT customer_id, COUNT(*), SUM(order_amount) 
FROM orders 
WHERE create_time BETWEEN '2024-01-01' AND '2024-12-31'AND status IN (1, 2, 3)
GROUP BY customer_id 
ORDER BY total_order_amount DESC 
LIMIT 100;
  • 执行计划关键指标:
    idselect_typetabletypepossible_keyskeykey_lenrefrowsfilteredExtra
    1SIMPLEordersALLNULLNULLNULLNULL600000010.00Using where; Using filesort
  • ​​​​​​​问题点:​​​​​​​
    • type: ALL:表示全表扫描,未使用索引。

    • Using filesort:表示需要额外排序,增加 CPU 和 I/O 开销

    • Using temporary:表示使用了临时表,常见于 GROUP BY 操作。

(二)优化方案

索引优化
  • 创建联合索引,覆盖 WHERE 条件和 GROUP BY 字段:
    ALTER TABLE orders ADD INDEX idx_status_createtime_customerid (status, create_time, customer_id);
  • 优化后执行计划
idselect_typetabletypepossible_keyskeykey_lenrefrowsfilteredExtra
1SIMPLEordersrangeidx_status_createtime_customerididx_status_createtime_customerid6NULL150000100.00Using where; Using index; Using filesort
  • 优化效果:
    • 扫描行数从 600 万减少到 15 万
    • 使用覆盖索引Using index),避免回表
    • 执行时间降至约 1.5 秒
SQL 改写
  • 原始写法在 GROUP BY需要对大量数据进行排序,性能较差。
  • 优化思路是先缩小数据集再排序
    SELECT customer_id, order_count, total_order_amount 
    FROM (SELECT customer_id,COUNT(*) AS order_count,SUM(order_amount) AS total_order_amount FROM orders WHERE create_time BETWEEN '2024-01-01' AND '2024-12-31'AND status IN (1, 2, 3)GROUP BY customer_id 
    ) AS tmp 
    ORDER BY total_order_amount DESC 
    LIMIT 100;
  • 优化效果:
    • 避免大结果集排序
    • 执行时间进一步降至约 0.9 秒。
归档历史数据

将超过 2 年的订单数据迁移到历史表,减少主表数据量

-- 创建归档表
CREATE TABLE orders_archive LIKE orders;-- 迁移数据
INSERT INTO orders_archive 
SELECT * FROM orders 
WHERE create_time < '2023-01-01';-- 删除原表过期数据
DELETE FROM orders 
WHERE create_time < '2023-01-01';
  • 优化效果:
    • 数据量从 600 万减少到 400 万
    • 查询时间稳定在 0.6 秒以内

(三)最终优化组合

  • 联合索引idx_status_createtime_customerid
  • SQL 改写先聚合后排序
  • 数据归档定期清理历史数据
  • 参数调优调整 my.cnf 中的相关参数
    [mysqld]
    tmp_table_size = 256M #定义MySQL内部临时表(MEMORY 表)的最大允许大小
    #临时表的大小超过此值,MySQL会将其转储到磁盘,这会显著降低性能
    #单位为字节,建议设为服务器内存的 1%-2%max_heap_table_size = 256M 
    #限制用户显式创建的 MEMORY表的最大大小(通过 CREATE TABLE ... ENGINE=MEMORY)sort_buffer_size = 8M 
    #定义每个连接用于排序操作(如 ORDER BY、DISTINCT、GROUP BY)的缓冲区大小
    #排序操作会将数据加载到缓冲区,如果缓冲区不足,MySQL 会使用磁盘临时文件(filesort),导致性能下降
    

三、优化总结

优化手段原理说明适用场景
联合索引覆盖 WHERE 和 GROUP BY 字段,减少回表和排序开销多条件过滤 + 分组统计查询
SQL 改写减少中间结果集大小,避免全量排序含 LIMIT 的分页或 TopN 查询
数据归档降低单表数据量,减少索引树高度时间序列数据的大表
参数调优增加内存分配,避免磁盘临时表复杂排序或分组操作

锁机制与并发优化

一、事务与锁机制

(一)SQL 语句类型

分类全称关键字作用
DDLData Definition LanguageCREATE / ALTER / DROP定义或修改数据库、表、索引、视图等结构
DMLData Manipulation LanguageINSERT / UPDATE / DELETE对表中数据进行增、删、改
DQLData Query LanguageSELECT / SHOW查询数据
DCLData Control LanguageGRANT / REVOKE权限控制
TCLTransaction Control LanguageBEGIN / COMMIT / ROLLBACK / SAVEPOINT事务控制

(二)事务

  • 作用域:仅针对 DMLINSERTUPDATEDELETE)。

  • 定义:一组 DML 语句要么全部成功,要么全部失败,保证数据准确性

(三)ACID 特性

特性描述
原子性 Atomicity事务内所有 DML 操作要么全部成功要么全部回滚
一致性 Consistency事务完成后,数据库从一种一致状态变为另一种一致状态
隔离性 Isolation并发事务互不干扰,隔离级别控制可见性。
持久性 Durability一旦提交,数据永久生效,即使系统崩溃。

二、锁机制

锁类别粒度类型典型语句事务关联
全局锁实例级只读FLUSH TABLES WITH READ LOCK一致性备份
表级锁表级读/写LOCK TABLES t WRITE离线批处理
行级锁行级共享/排他SELECT … FOR UPDATE并发 DML 事务
MDL表级(自动)元数据锁隐式防止 DDL 与 DML 冲突

(一)全局锁

介绍
  • 全局锁通过 FLUSH TABLES WITH READ LOCK 对整个 MySQL 实例加锁所有表瞬间变为只读,任何写事务或 DDL 都会被阻塞
作用
  • 用于需要“整库一致性快照”的场景:全库逻辑备份、主从切换、版本升级前的数据校验
示例
#加全局读锁
FLUSH TABLES WITH READ LOCK;#在另一个终端执行一致性备份
mysqldump -u root -ptest --single-transaction test > backup.sql#备份完成后立即解锁
UNLOCK TABLES;
解释
  • FLUSH TABLES WITH READ LOCK刷新所有表并加全局读锁;此时所有写操作被阻塞
  • 配合 mysqldump --single-transaction 可在 InnoDB 上实现“秒级”一致性备份,避免长时间锁库导致的业务写入中断

(二)表级锁

介绍
  • 表级锁通过 LOCK TABLES 显式锁定单张表粒度比全局锁小会话级显式锁
作用
  • 适用于离线批量导入、报表生成、表维护(OPTIMIZE/ALTER 前)等需要独占表的场景。
示例
#加表级写锁,确保 employees 表有主键索引,避免退化为全表锁
LOCK TABLES employees WRITE;#批量更新(其他会话对该表的读写均被阻塞)
UPDATE employees SET status = 4 WHERE create_time < '2025-07-01';#解锁
UNLOCK TABLES;
解释
  • LOCK TABLES employees WRITE 获得排他写锁,其他会话无法读写该表;若使用 READ 则仅允许并发读。
  • 会话退出或执行 UNLOCK TABLES 后锁立即释放;脚本中务必保证解锁,避免锁表雪崩

(三)行级锁

介绍
  • InnoDB 存储引擎支持的最细粒度锁仅锁定索引记录或记录间隙,不影响其他行。
作用
  • 高并发 OLTP 场景下保证数据一致性防止脏读、幻读、更新丢失
示例
#开启事务
START TRANSACTION;#对 id = 1 的行加排他锁,WHERE 条件必须命中索引,否则行锁会退化为表锁
SELECT * FROM employees WHERE id = 1 FOR UPDATE;#执行更新
UPDATE employees SET name = '青竹' WHERE id = 1;#提交事务,锁自动释放
COMMIT;
解释
  • FOR UPDATE 对主键 id = 1 的记录加排他锁其他事务无法修改或加锁该行
  • WHERE 条件无法走索引,会退化为表级锁,因此务必确保有合适索引;长事务会阻塞后续操作

(四)元数据锁

介绍
  • MDL 是 MySQL 5.5+ 自动维护的表级锁,用于保护表结构一致性防止 DDL 与 DML 并发冲突
作用
  • 任何 DML 语句都会隐式获取 MDL 共享锁;DDL 需要排他 MDL
  • 长事务未提交时,DDL 会被阻塞,出现 “Waiting for table metadata lock”。
示例
  • 会话 A
    START TRANSACTION;
    SELECT * FROM employees WHERE id = 1 FOR UPDATE;
    #此时持有 employees 的 MDL 共享锁
  • 会话 B
    ALTER TABLE employees ADD COLUMN extra VARCHAR(20);
    #等待 MDL 排他锁,被阻塞
  • 查看锁等待
    SELECT * FROM performance_schema.metadata_locks;
    SHOW PROCESSLIST;
解释
  • 会话 A 未提交导致会话 B 的 ALTER 无法获得排他 MDL
  • 解决缩短事务、提交/回滚后执行 DDL,或设置 lock_wait_timeout 避免无限等待。

三、锁机制在MySQL优化中的价值

  • 备份窗口最小化
    • 全局锁 + --single-transaction 组合,将一致性备份时间从分钟级降到秒级,降低业务抖动。
  • 批量任务提速
    • 表级写锁在低峰期一次性处理百万级记录,避免逐行锁带来的大量上下文切换。
  • 并发冲突降级
    • 行级锁保证热点数据高并发读写表级锁用于冷数据批量维护,两者互补。
  • DDL 平滑执行
    • 通过监控 MDL 等待队列提前结束长事务,使 ALTER TABLE 在业务低峰期 10 秒内完成,避免高峰期锁表雪崩

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/90961.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/90961.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/90961.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

S7-1200 与 S7-300 PNS7-400 PN UDP 通信 TIA 相同项目

7-1200 与 S7-300 PN/S7-400 PN UDP 通信 TIA 相同项目S7-1200 与 S7-300 PN 口之间的以太网通信可以通过 UDP 协议来实现&#xff0c;使用的通信指令是在双方 CPU 调用通信-开放式用户通信TSEND_C&#xff0c;TRCV_C&#xff08;1200支持&#xff0c;300不支持&#xff09;或T…

java进阶(二)+学习笔记

面向对象设计原则1. 面向对象概念面向对象 是一种编程思想&#xff0c;面向过程是关注实现的步骤&#xff0c;每个步骤定义一个函数&#xff0c;调用函数执行即可。面向对象关注的是谁(对象)来执行&#xff0c; 把具有相同属性和行为的一类事物(对象)进行抽象成类&#…

[附源码+数据库+毕业论]基于Spring Boot+mysql+vue结合内容推荐算法的学生咨询系统

摘要 随着互联网的普及&#xff0c;学生在学习和生活中面临着海量信息&#xff0c;如何高效获取有价值的内容成为亟待解决的问题。本文基于 Spring Boot 框架&#xff0c;结合内容推荐算法&#xff0c;设计并实现了一个学生咨询系统。系统采用 Spring Boot MyBatis MySQL Vu…

DeepSeek 微调实践:DeepSeek-R1 大模型基于 MS-Swift 框架部署 / 推理 / 微调实践大全

注&#xff1a;此文章内容均节选自充电了么创始人&#xff0c;CEO兼CTO陈敬雷老师的新书《GPT多模态大模型与AI Agent智能体》&#xff08;跟我一起学人工智能&#xff09;【陈敬雷编著】【清华大学出版社】 GPT多模态大模型与AI Agent智能体书籍本章配套视频课程【陈敬雷】 文…

python基础知识pip配置pip.conf文件

pip.conf一、 INI格式二、 级别三、 文件位置四、 加载顺序五、 常用一、 INI格式 配置文件可以更改pip命令行选项的默认值&#xff0c;这个文件是使用INI格式编写的。 INI格式 主要包含三个内容&#xff1a;1.节section 2.键值对 3.注释 [section1] key1 value1 \\注释 key2…

深入理解 Java JVM

文章目录&#x1f4d5;1. JVM简介&#x1f4d5;2. JVM运行流程&#x1f4d5;3. JVM运行时数据区&#x1f4d5;4. JVM类加载✏️4.1 类加载过程✏️4.2 双亲委派模型✏️4.3 破坏双亲委派模型&#x1f4d5;5. JVM垃圾回收机制&#xff08;GC机制&#xff09;✏️5.1 判断死亡对象…

Linux内核高效之道:Slab分配器与task_struct缓存管理

前言 在Linux内核中&#xff0c;进程创建与销毁是最频繁的操作之一。想象一下&#xff1a;当系统每秒需要处理成百上千次fork()和exit()调用时&#xff0c;如何保证task_struct&#xff08;进程描述符&#xff09;的分配与释放既快速又不产生内存碎片&#xff1f;这就是Slab分配…

双esp8266-01之间UDP透传传输,自定义协议

使用AT模式的透传&#xff0c;串口打印的数据包含pd1,4,数据打印的数据不是直接将数据打印出来&#xff0c;包含了pd1,4,特殊字符&#xff0c;针对想要直接开机直接透传&#xff0c;打印数据且按照自主协议帧头的功能进行开发。1.server程序&#xff1a;/*************SERVER**…

BGP 路由优选属性(7)【MED】官方考试综合实验题【bgp】【acl】【ip-prefix】【route-policy】【icmp 环路】精讲

目录 一、MED 属性介绍 二、实验 2.1 实验目的 2.2 拓扑图 2.2 实验说明 2.3 配置脚本 2.4 验证配置 2.5 问题分析 2.7 题目需求解析 2.8 场景 1&#xff1a;只允许在 AS12 上操作 2.9 场景 2&#xff1a;只允许在 AS34 上操作 正文 一、MED 属性介绍 MED 全称 mu…

html-初级标签

一.浏览器能识别的标签 1.1 head标签里的编码和title <head><meta charset"UTF-8"><title>Title</title> </head>1.2 标题 <body><h1>Welcome to my website</h1><h2>Welcome to my website</h2><…

【八股消消乐】Kafka集群 full GC 解决方案

&#x1f60a;你好&#xff0c;我是小航&#xff0c;一个正在变秃、变强的文艺倾年。 &#x1f514;本专栏《八股消消乐》旨在记录个人所背的八股文&#xff0c;包括Java/Go开发、Vue开发、系统架构、大模型开发、具身智能、机器学习、深度学习、力扣算法等相关知识点&#xff…

《Java Web程序设计》实验报告二 学习使用HTML标签、表格、表单

目 录 一、实验目的 二、实验环境 三、实验步骤和内容 1、小组成员分工&#xff08;共计4人&#xff09; 2、实验方案 3、实验结果与分析 4、项目任务评价 四、遇到的问题和解决方法 五、实验总结 一、实验目的 1、HTML基础知识、基本概念 2、使用HTML标签、表格进行…

jenkins使用Jenkinsfile部署springboot+docker项目

文章目录前言一、前期准备二、编辑构建文件二、Jenkins构建总结前言 前面使用Jenkinsfile部署了前端vue项目&#xff0c;接着学习Jenkinsfile部署springboot项目。 一、前期准备 已经安装好centos,并且安装了jenkins和docker。本地新建springboot并上传到gitee上。 二、编辑…

使用ESM3蛋白质语言模型进行快速大规模结构预测

文章目录ESM3介绍ESM3在线使用本地使用api批量预测ESM相较于AlphaFold的优势ESM3介绍 ESM3是由EvolutionaryScale&#xff08;前Meta团队&#xff09;开发的一款蛋白质大语言模型&#xff0c;于2025年以《用语言模型模拟 5 亿年的进化》为题正式发表在Science上 文章链接: htt…

PostgreSQL 时间/日期管理详解

PostgreSQL 时间/日期管理详解 引言 PostgreSQL是一款功能强大的开源关系型数据库管理系统&#xff0c;在时间/日期管理方面具有独特的优势。本文将详细介绍PostgreSQL中时间/日期数据类型及其相关功能&#xff0c;帮助读者更好地理解和应用时间/日期管理。 时间/日期数据类型 …

Agent篇

Agent包含哪些模块&#xff0c;实现了什么功能Agent 就像一个多功能的接口&#xff0c;它能够接触并使用一套工具。根据用户的输入&#xff0c;Agent会规划出一条解决用户问题的路线&#xff0c;决定其中需要调用哪些工具&#xff0c;并调用这些工具。Agent 大语言模型规划记忆…

利用 MySQL 进行数据清洗

利用 MySQL 进行数据清洗是数据预处理的重要环节&#xff0c;以下是常见的数据清洗操作及对应 SQL 示例&#xff1a;1. 去除重复数据使用 ROW_NUMBER() 或 GROUP BY 识别并删除重复记录。-- 查找重复记录&#xff08;以 user_id 和 email 为例&#xff09; WITH Duplicates AS …

【MySQL笔记】事务的ACID特性与隔离级别

目录1. 什么是事务&#xff1f;2. 事务的ACID特性&#xff08;重要&#xff09;3. 事务控制语法4. 隔离级别与并发问题1. 什么是事务&#xff1f; 事务&#xff08;Transaction&#xff09;是由一组SQL语句组成的逻辑单元&#xff0c;这些操作要么全部成功&#xff0c;要么全部…

Mock 数据的生成与使用全景详解

Mock 数据的生成与使用全景详解 在后端开发过程中,真实数据往往受限于业务进度、隐私保护或接口未完成等因素,无法及时获取。这时,Mock数据(模拟数据)就成为开发、测试、联调不可或缺的利器。本文将从Mock数据的意义、常用场景、主流工具、实战案例到最佳实践,带你全面掌…

HTML 标题标签

需求&#xff1a;在网页显示六级标题标签。代码&#xff1a;//需求&#xff1a;在网页显示六级标题标签。 <!DOCTYPE html> <html><head><meta charset"utf-8" /><title></title></head><body><h1>一级标题&l…