MySQL索引与事物

article/2025/9/6 15:24:26

目录

一:MySQL索引介绍

1.索引概述

2.索引作用

3.索引的分类

关键区别

(1)普通索引

(2)唯一索引

(3)主键索引

(4)组合索引(最左前缀)

4.全文索引(FULLTEXT)

(1) 基本概念

(2) 版本与引擎支持

5.创建索引的原则依据

6.查看索引

7.删除索引

二:MySQL事务

1. 事务的基本概念

2. 事务的ACID特性

3. 事务的隔离级别

(1)用 BEGIN,ROLLBACK,COMMIT 来实现

(2)直接用 SET 来改变 MySQL 的自动提交模式


一:MySQL索引介绍

        索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址。在数据十分庞大的时候,索引可以大大加快查询的速度。这是因为使用索引后可以不用扫描全表来定位某行的数据,而是先通过索引表找到该行数据对应的物理地址然后访问相应的数据。索引的作用类似于图书的目录,可以根据目录中的页码快速找到所需的内容。

1.索引概述

主题描述
索引概述索引是对记录集的多个字段进行排序的方法,可以提高数据检索效率。
数据存储数据以数据块的形式保存在磁盘上,数据块包含数据部分和指向下一个数据块的指针,不需要连续存储。
无序字段搜索在无序字段上搜索需要线性搜索(Linear Search),平均访问 N/2N/2 个数据块。
有序字段搜索在有序字段上可以运用二分查找(Binary Search),仅需访问 log⁡2(N)log2(N) 个数据块。
索引作用索引通过创建排序的数据结构(包含字段值和指针),允许二分查找,显著提高查询性能。
索引副作用索引需要额外的磁盘空间,尤其是多个字段建立索引时,可能占用大量空间并达到文件系统大小限制。
MyISAM引擎MyISAM引擎将索引统一保存在一张表中,进一步增加磁盘空间的使用。

2.索引作用

         在索引列上,除了上面提到的有序查找之外,数据库利用各种各样的快速定位技术,能够大大提高查询效率。特别是当数据量非常大,查询涉及多个表时,使用索引往往能使查询速度加快成千上万倍。

         例如,有 3个未索引的表 t1、t2、t3,分别只包含列 c1、c2、c3,每个表分别含有 1000 行数据组成,均为 1~1000 的数值,查找对应值相等行的查询如下所示。

         此查询结果应该为1000行,每行包含3个相等的值。在无索引的情况下处理此查询,必须寻找3个表所有的组合,以便得出与WHERE子句相配的那些行。而可能的组合数目为 1000x1000x1000(十亿),显然查询将会非常慢。
           如果对每个表进行索引,就能极大地加速查询进程,,利用索引的查询处理如下:

从表 t1 中选择第一行,查看此行所包含的数据。
使用表 t2 上的索引,直接定位 t2 中与 t1 的值匹配的行。同理,利用表 t3上的索引,直接定位 t3 中与 t1的值匹配的行。
扫描表 t1 的下一行并重复前面的过程,直到遍历 t1中所有的行。
            在此情形下,仍然对表 t1 执行了一个完全扫描,但能够在表 t2 和 t3 上进行索引查找直接取出这些表中的行,比未用索引时要快一百万倍。
              利用索引,MySQL 加速了 WHERE 子句满足条件行的搜索,而在多表连接查询时、在执行连接时加快了与其他表中的行匹配的速度。

类别优点缺点
查询性能大幅提高数据检索速度,尤其是对有序字段使用二分查找(时间复杂度 O(log⁡N)O(logN))。索引本身占用存储空间,增加数据库文件大小。
排序优化加速 ORDER BYGROUP BY 等排序操作。索引需要维护,数据增删改(INSERT/DELETE/UPDATE)时性能会降低。
唯一性约束唯一索引可保证字段值的唯一性(如主键)。过多的索引会增加写操作的开销,影响写入性能。
覆盖索引若查询仅涉及索引字段,可避免回表(直接从索引获取数据,减少 I/O)。索引需要定期维护(如重建、优化),否则可能产生碎片,降低效率。
连接优化加速表连接(JOIN)操作,尤其是外键字段的索引。不合理的索引设计(如低选择性字段)可能无法提升性能,反而浪费资源。
锁竞争减少全表扫描,降低锁冲突概率(如 SELECT 操作锁定更少数据)。某些索引类型(如哈希索引)不支持范围查询或排序。

3.索引的分类

分类角度索引类型描述特点
物理存储聚簇索引数据行的物理存储顺序与索引顺序一致(如InnoDB的主键索引)。- 一个表只能有一个聚簇索引。
- 适合范围查询,减少I/O操作。
非聚簇索引索引顺序与数据物理存储顺序无关(如MyISAM的索引)。- 一个表可有多个非聚簇索引。
- 需回表查询数据,单行检索更快。
逻辑功能普通索引最基本的索引类型,无唯一性约束。- 允许重复值和NULL。
- 仅加速查询。
唯一索引索引列的值必须唯一,但允许NULL(可多次出现)。- 保证数据唯一性。
- 可用于避免重复录入。
主键索引特殊的唯一索引,不允许NULL,且一个表只能有一个。- 默认聚簇索引(InnoDB)。
- 标识行的唯一性。
组合索引对多个列联合建立的索引(如 INDEX(col1, col2))。- 遵循最左前缀原则。
- 减少单列索引开销,优化多条件查询。
全文索引针对文本内容的分词索引(如 FULLTEXT),支持模糊搜索。- 仅适用于MyISAM/InnoDB(5.6+)。
- 适合大文本字段(如文章搜索)。
关键区别
  • 聚簇索引:数据即索引(如InnoDB主键),非聚簇索引:索引与数据分离(如MyISAM)。

  • 唯一索引 vs 主键索引:主键不允许NULL,且是表的唯一标识;唯一索引允许NULL(但NULL可重复)。

  • 组合索引:查询需命中最左列(如 INDEX(a,b) 需条件包含 a 才能生效)。

(1)普通索引

特性说明
定义最基本的索引类型,无任何唯一性约束,允许重复值和 NULL
作用加速查询条件(WHERE)、排序(ORDER BY)和连接(JOIN)操作。
前缀索引可指定列的前 length 个字符作为索引(节省空间,但可能降低区分度)。
适用列类型适用于 CHARVARCHARINT 等类型;BLOB/TEXT 必须用前缀索引。
最大长度限制- 默认上限:255 字节(MyISAM/InnoDB 为 1000 字节)。
- 超长时需用前缀索引。

直接创建索引:

修改表结构的方式添加索引:

创建表结构时,同时创建索引:

(2)唯一索引

特性说明
定义索引列的值必须唯一,但允许包含 NULL 值(NULL 可重复出现)。
与主键索引的区别- 主键索引不允许 NULL,唯一索引允许。
- 一个表只能有一个主键,但可以有多个唯一索引。
组合唯一索引如果是多列组合索引,则列值的组合必须唯一(单列可重复)。
创建方式1. 直接创建:CREATE UNIQUE INDEX
2. 修改表结构:ALTER TABLE ADD UNIQUE
3. 建表时定义
适用场景- 避免数据重复(如用户名、邮箱、手机号等)。
- 需要唯一性约束但允许 NULL 的字段。

创建唯一索引:

修改表结构的方式添加唯一索引:

创建表的时候同时创建唯一索引:

(3)主键索引

特性说明
定义特殊的唯一索引,用于唯一标识表中的每一行数据,不允许 NULL 值。
唯一性一个表只能有一个主键索引,且主键列的值必须唯一。
约束自动创建聚簇索引(InnoDB),物理存储顺序与主键顺序一致。
创建方式通常在建表时定义,也可通过 ALTER TABLE 添加。
适用场景需要唯一标识每一行数据的列(如用户ID、订单号等)。

与唯一索引的区别

对比项主键索引唯一索引
数量限制一个表只能有一个。一个表可以有多个。
NULL 值不允许。允许(但 NULL 可重复)。
用途标识行唯一性。确保字段值唯一(非标识用途)。

(4)组合索引(最左前缀)

           平时用的 SQL 查询语句一般都有比较多的限制条件,所以为了进一步榨取MySQL 的效率,就要考虑建立组合索引。在组合索引的创建中,有两种场景,即为单列索引和多列索引。下面通过一个场景来具体说明单列索引和多列索引。

            在一个 user 用户表中,有 name,age,sex 三个字段,分别分三次建立了INDEX 普通索引。那么在select*from user where name =AND age =AND sex=’’;数据査询语句中就会分别检索三条索引,虽然扫描效率有所提升,但却还未达到最优。这个时候就需要使用到组合索引(即多列索引),如下所示。

在 MySQL 中,有一个知识点叫最左原则。下面的 select 语句的 where 条件是依次从左往右执行的。

若使用的是组合索引 index user(name,age,sex)。在查询中,name、age、sex的顺序必须如组合索引中一致排序,否则索引将不会生效,例如:

如果采用“select *from user where age=‘’AND name =‘’ AND sex=‘’;”查询方式,这条组合索引将无效化,所以一般在建立索引时,要先想好相应的查询业务,尽量避免虽然有索引,但是使用不上的问题。

4.全文索引(FULLTEXT)

(1) 基本概念

  • 定义:专门用于对文本内容(CHAR/VARCHAR/TEXT)进行分词检索的索引类型,支持自然语言搜索和布尔搜索。

  • 适用场景:大段文本的模糊匹配(如文章搜索、商品描述搜索)。

(2) 版本与引擎支持

版本/引擎支持情况
MySQL < 5.6仅 MyISAM 表支持全文索引。
MySQL ≥ 5.6InnoDB 和 MyISAM 均支持全文索引。
其他存储引擎MEMORY、NDB 等不支持。

创建表的全文索引:

修改表结构添加全文索引:

直接创建索引:

5.创建索引的原则依据

数据库建立索引的原则:

原则说明示例/注意事项
查询 vs 增删改索引适合读多写少的场景。写操作频繁的表需谨慎建索引。- 日志表频繁插入,避免过多索引。
- 用户表频繁查询,适合建索引。
高频 WHERE 条件为频繁出现在 WHEREJOINORDER BY 中的字段建索引。SELECT * FROM orders WHERE user_id=100 → 为 user_id 建索引。
复合索引优先联合索引比多个单列索引更高效,但需遵循最左前缀原则INDEX(user_id, status) 可优化 WHERE user_id=1 AND status='paid'
小型表避坑数据量小的表(如配置表)建索引可能降低性能(全表扫描更快)。表数据 < 1000 行时,索引可能无收益。
低区分度字段慎用对重复值多的字段(如性别、布尔值)建索引效果差。gender 字段仅有 'M'/'F',索引效率极低。
避免大类型索引不要对 TEXT/BLOB 等大字段建完整索引,应使用前缀索引INDEX(description(50)) 只索引前 50 字符。

索引建立的原则:

原则分类具体原则说明及示例
索引的必要性在经常用作过滤器的字段上建立索引如 WHERE status='active' 中的 status 字段应建索引。
在频繁进行 GROUP BYORDER BY 的字段上建立索引如 ORDER BY create_time 或 GROUP BY department_id 的字段。
在不同值较少的字段上避免建立索引(如性别、布尔值)区分度低的字段(如 gender 只有 'M'/'F')建索引效果差。
索引的避免对经常存取的列避免建立索引高频更新的列(如 last_login_time)建索引会增加写开销。
外键与连接优化在用于连接的列(主键/外键)上建立索引如 JOIN ON user.id = order.user_id 中的 user_id 字段。
复合索引设计在经常存取的多个列上建立复合索引,顺序按使用频度确定复合索引 (department_id, status) 需优先放高频字段 department_id
聚簇索引选择默认使用非聚簇索引,但对唯一值适中且大范围查询的列考虑聚簇索引如主键 id 或范围查询频繁的 create_date
性能权衡索引的建立需基于查询分析和预测,平衡读写性能通过 EXPLAIN 分析慢查询,避免过度索引导致写入性能下降。
  1. 复合索引顺序

    • 最左前缀原则:INDEX(A, B, C) 可优化 WHERE A=1 AND B=2,但无法优化 WHERE B=2

    • 高频字段优先:将查询频率高的字段放在复合索引左侧。

  2. 聚簇索引适用场景

    • 列值唯一性适中(如日期范围)。

    • 减少大范围查询的 I/O 操作(如 WHERE create_date BETWEEN '2023-01-01' AND '2023-12-31')。

  3. 索引维护

    • 定期删除未使用的索引(如 ALTER TABLE DROP INDEX idx_unused)。

    • 监控索引碎片化并重建(如 OPTIMIZE TABLE orders)。

6.查看索引

        MySQL 数据表索引已经创建好了,那么如何才能查看刚刚创建的索引?或者怎么去查看表内已经存在的索引?有以下两种查看当前索引的方式。

 

以 auth表为例,査看auth表的索引内容。

字段解析:

字段名值(示例)说明
Tablerenyuan索引所属的表名。
Non_unique0是否允许重复值:
0:唯一索引(如主键或唯一约束)。
1:普通索引。
Key_nameid索引的名称。此处为 id,可能是主键索引。
Seq_in_index1索引中列的序号(从1开始),复合索引时表示列的顺序。
Column_nameid索引对应的列名。
CollationA排序规则:
A:升序(Ascending)。
D:降序。
NULL:未排序。
Cardinality0索引中唯一值的估计数量(基数)。值越大,索引区分度越高。
注意0 可能是表无数据或统计未更新(可执行 ANALYZE TABLE renyuan 刷新)。
Sub_partNULL前缀索引的长度(如 10 表示只索引前10个字符)。NULL 表示整列索引。
PackedNULL是否压缩索引,一般未使用。
Null是否允许 NULL 值:
- 空:不允许。
YES:允许。
Index_typeBTREE索引类型:
BTREE:默认的B+树索引(支持范围查询)。
HASH:哈希索引(仅精确匹配)。
Comment索引注释(可选)。
VisibleYES索引是否对优化器可见(YES/NO)。
ExpressionNULLMySQL 8.0+ 支持的函数索引表达式(如 JSON 字段路径)。

7.删除索引

索引在创建之后,是会占用一定的磁盘空间的,因此表内如果有不再使用的索引从数据库性能方面考虑,最好是删除无用索引。索引的删除有如下两种方法。

DROP    INDEX    索引名   ON    表名;
ALTER   TABLE    表名    DROP     INDEX    索引名;

添加索引:

删除索引:

二:MySQL事务

1. 事务的基本概念

  • 定义:事务是一组原子性的SQL操作,要么全部成功,要么全部失败。

  • 适用场景:需要保证数据完整性的复杂操作(如银行转账、订单支付)。

  • 引擎支持:仅 InnoDB 引擎支持完整的事务特性(MyISAM不支持)。

2. 事务的ACID特性

特性说明示例
原子性事务中的操作要么全部成功,要么全部回滚。转账时,A账户扣款和B账户入账必须同时成功或失败。
一致性事务前后数据库状态必须符合业务规则(如余额不能为负)。转账后,总金额(A+B)必须与转账前一致。
隔离性并发事务之间互不干扰(通过隔离级别控制)。事务A未提交时,事务B不应看到中间结果。
持久性事务提交后,数据永久保存(即使系统崩溃)。转账成功后的数据必须写入磁盘,断电不丢失。

3. 事务的隔离级别

隔离级别脏读不可重复读幻读说明
读未提交✅ 可能✅ 可能✅ 可能最低隔离级别,性能高但数据一致性差。
读已提交❌ 不可能✅ 可能✅ 可能仅读取已提交的数据(Oracle默认)。
可重复读(默认)❌ 不可能❌ 不可能✅ 可能同一事务内多次读取结果一致(MySQL InnoDB默认)。
串行化❌ 不可能❌ 不可能❌ 不可能最高隔离级别,强制事务串行执行,性能最低但一致性最强。

      在 MySQL 命令行的默认设置下,事务都是自动提交的,即执行SQL 语句后就会马上执行COMMIT操作。因此要显式地开启一个事务必须使用命令BEGIN或 START TRANSACTION,或者执行命令 SET AUTOCOMMIT=0,用来禁止使用当前会话的自动提交。

事务控制语句包含:

命令语法作用示例
开启事务BEGIN; 或 START TRANSACTION;显式开始一个事务(关闭自动提交)。BEGIN;
提交事务COMMIT; 或 COMMIT WORK;永久保存事务中的所有修改。COMMIT;
回滚事务ROLLBACK; 或 ROLLBACK WORK;撤销事务中的所有未提交修改。ROLLBACK;
设置保存点SAVEPOINT savepoint_name;在事务中创建标记点,支持部分回滚。SAVEPOINT sp1;
回滚到保存点ROLLBACK TO savepoint_name;回滚到指定保存点(不影响保存点之前的操作)。ROLLBACK TO sp1;
删除保存点RELEASE SAVEPOINT savepoint_name;删除已定义的保存点(若保存点不存在会报错)。RELEASE SAVEPOINT sp1;
设置隔离级别SET TRANSACTION ISOLATION LEVEL level;设置当前会话或下一个事务的隔离级别(需在事务开始前设置)。SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
隔离级别命令语法脏读不可重复读幻读
读未提交SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;✅ 可能✅ 可能✅ 可能
读已提交SET TRANSACTION ISOLATION LEVEL READ COMMITTED;❌ 不可能✅ 可能✅ 可能
可重复读(默认)SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;❌ 不可能❌ 不可能✅ 可能
串行化SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;❌ 不可能❌ 不可能❌ 不可能

MYSQL 事务处理主要有两种方法:


(1)用 BEGIN,ROLLBACK,COMMIT 来实现

BEGIN 开始一个事务
ROLLBACK事务回滚
COMMIT 事务确认

(2)直接用 SET 来改变 MySQL 的自动提交模式

SET AUTOCOMMIT=0 禁止自动提交

SET AUTOCOMMIT=1 开启自动提交
以下是事务的示例:


http://www.hkcw.cn/article/hfaCseOwOq.shtml

相关文章

光年号,国外云手机号的创新应用与发展趋势

光年号&#xff0c;国外云手机号的创新应用与发展趋势 光年号作为新兴通信技术代表&#xff0c;与国外云手机号结合&#xff0c;推动通信变革。光年号的灵活性提升了国外云手机号的使用效率&#xff0c;光年号服务正在全球扩展&#xff0c;光年号和国外云手机号的融合创新&…

Java开发经验——阿里巴巴编码规范实践解析7

摘要 本文主要解析了阿里巴巴 Java 开发中的 SQL 编码规范&#xff0c;涉及 SQL 查询优化、索引建立、字符集选择、分页查询处理、外键与存储过程的使用等多个方面&#xff0c;旨在帮助开发者提高代码质量和数据库操作性能&#xff0c;避免常见错误和性能陷阱。 1. 【强制】业…

【经验】Ubuntu中设置terminator的滚动行数、从Virtualbox复制到Windows时每行后多一空行

1、设置terminator的滚动行数 1.1 问题描述 在终端 terminator 中&#xff0c;调试程序时&#xff0c;只能查看有限行数的打印日志&#xff0c;大约是500行&#xff0c;怎么能增加行数 1.2 解决方法 1&#xff09;安装terminator sudo apt install terminator和 terminato…

Photoshop2025(PS2025)软件及安装教程

在数字图像编辑领域&#xff0c;Adobe Photoshop 一直是无可争议的王者。如今&#xff0c;Photoshop 2025 重磅登场&#xff0c;再次为我们带来了惊喜与变革&#xff0c;进一步巩固了它在行业中的领先地位。 Photoshop 2025 在人工智能方面的升级令人瞩目。其全新的 “Magic Se…

NHANES指标推荐:UAR

文章题目&#xff1a;The Uric Acid to Albumin Ratio Predicts All-cause and Cardiovascular Mortality Among U.S. Adults Results from the National Health and Nutrition Examination Survey in 2003-2018 中文标题&#xff1a;尿酸与白蛋白比值可预测美国成年人的全因死…

C++23 std::fstreams基础回顾

文章目录 引言1.1 std::fstreams概述1.2 std::fstreams的主要功能和常用操作 2. 独占模式 (P2467R1) 的详细介绍2.1 独占模式的定义和背景2.2 独占模式的作用和优势 3. C23 std::fstreams支持独占模式 (P2467R1) 的具体实现方式3.1 代码示例3.2 实现步骤解释 4. 使用该特性可能…

Unity3D仿星露谷物语开发55之保存游戏到文件

1、目标 将游戏保存到文件&#xff0c;并从文件中加载游戏。 Player在游戏中种植的Crop&#xff0c;我们希望保存到文件中&#xff0c;当游戏重新加载时Crop的GridProperty数据仍然存在。这次主要实现保存地面属性&#xff08;GridProperties&#xff09;信息。 我们要做的是…

Windows 中禁止在桌面放置文件以保持桌面整洁

假设用户名为xxx&#xff0c;进入文件夹C:\Users\xxx&#xff0c;选中该文件夹下桌面文件夹并单击右键选择属性。 点击编辑。 选中用户xxx并将其写入权限设置为拒绝。随后桌面在无法主动授权情况下无法新建文件或者文件夹&#xff08;设置权限之前可以先将桌面文件移动到别处&…

STM32开发全解析:从环境搭建到项目实战的技术文档撰写指南

在嵌入式开发领域&#xff0c;STM32系列微控制器凭借高性能、低功耗及丰富外设等特性&#xff0c;成为工程师的首选平台。本文以STM32F103C8T6为例&#xff0c;结合技术文档撰写规范&#xff0c;系统拆解从基础知识、开发环境到实战项目的全流程&#xff0c;为STM32技术传播提供…

AI数字人系统开发——引领未来交互革命

随着人工智能技术的不断发展&#xff0c;AI数字人系统开发正引领着一场前所未有的交互革命。它将打破传统的人机交互方式&#xff0c;为我们带来更加自然、智能、高效的交互体验。 我们的AI数字人系统开发&#xff0c;融合了多种先进的技术&#xff0c;如计算机视觉、语音识别…

tryhackme——Data Exfiltration

文章目录 一、网络拓扑二、数据泄露分类2.1 传统数据泄露2.2 C2通信2.3 隧道 三、隧道3.1 Exfiltration using TCP socket3.2 Exfiltration using SSH3.3 Exfiltrate using HTTP(S)HTTP隧道 3.4 Exfiltration using ICMP3.4.1 ICMP数据包结构3.4.2 MSF实现ICMP数据泄露3.4.3 IC…

计算机毕业设计酒店后台管理系统(vue+springboot+mysql+开题+论文)

摘要&#xff1a; 本文将介绍一个基于Vue.js、Spring Boot和MySQL的酒店后台管理系统毕业设计项目。该项目旨在为酒店提供高效、便捷、安全的管理平台&#xff0c;实现客房管理、订单管理、客户管理、员工管理等功能。本文将涵盖项目背景、技术选型、系统架构、功能模块、数据库…

华为OD机试真题——告警抑制(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

2025 A卷 100分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…

LabVIEW旋转机械智能监测诊断系统

采用 LabVIEW 开发旋转机械智能监测与故障诊断系统&#xff0c;通过集品牌硬件与先进信号处理技术&#xff0c;实现旋转机械振动信号的实时采集、分析及故障预警。系统突破传统监测手段的局限性&#xff0c;解决了复杂工业环境下信号干扰强、故障特征提取难等问题&#xff0c;为…

学习路之PHP--easyswoole简易增删改查入门

这里写目录标题 0、安装orm插件一、创建数据库二、创建模型三、 0、安装orm插件 composer require easyswoole/orm一、创建数据库 表&#xff1a; CREATE TABLE cases (id int(11) NOT NULL AUTO_INCREMENT COMMENT 主键,title varchar(200) CHARACTER SET utf8 COLLATE utf…

C++通用日志模块

概述 在 C 项目中开发时经常需要日志模块&#xff0c;为了不引入其它第三方日志模块包的基础上&#xff0c;基于标准的 C17 的基础自己封装了一个日志模块 功能总结 日志分等级&#xff08;DEBUG / INFO / WARN / ERROR&#xff09;支持日志文件轮转&#xff0c;自动备份旧日…

Arbitrum Stylus 合约实战 :Rust 实现 ERC20

在《Arbitrum Stylus 深入解析与 Rust 合约部署实战》篇中&#xff0c;我们深入探讨了 Arbitrum Stylus 的核心技术架构&#xff0c;包括其 MultiVM 机制、Rust 合约开发环境搭建&#xff0c;以及通过 cargo stylus 实现简单计数器合约的部署与测试。Stylus 作为 Arbitrum Nitr…

ADQ36-2通道2.5G,4通道5G采样PXIE

ADQ36是一款高端12位四通道灵活数据采集板&#xff0c;针对高通道数科学应用进行了优化。ADQ36具有以下特性: 4 / 2模拟输入通道每通道2.5 / 5 GSPS7gb/秒的持续数据传输速率两个外部触发器通用输入/输出&#xff08;GPIO&#xff09;ADQ36数字化仪包括固件FWDAQ ADQ36简介 特…

20中数组去重的方法20种数组去重的方法

开始 本文有很多问题&#xff0c;并没有直接给出答案&#xff0c;大伙有自己思考的可以评论区留言。关于时间复杂度只是一个大体的估计。20种只能说保守了&#xff0c;20种都是单论思路而已&#xff0c;暂时没想到更多的思路&#xff0c;有其他方法的可以评论区留言。 easy模式…

工厂模式 vs 策略模式:设计模式中的 “创建者” 与 “决策者”

在日常工作里&#xff0c;需求变动或者新增功能是再常见不过的事情了。而面对这种情况时&#xff0c;那些耦合度较高的代码就会给我们带来不少麻烦&#xff0c;因为在这样的代码基础上添加新需求往往困难重重。为了保证系统的稳定性&#xff0c;我们在添加新需求时&#xff0c;…