MySQL 索引和事务

目录

前言

一、MySQL 索引介绍

1. 索引概述

2. 索引作用

3. 索引的分类

3.1 普通索引

3.2 唯一索引

3.3 主键索引

3.4 组合索引 (最左前缀)

3.5 全文索引 (FULLTEXT)

3.6 创建索引的原则依据

3.7 查看索引

3.8 删除索引

二、MySQL 事务

1. 事务的 ACID 原则

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

(1) 用BEGIN、ROLLBACK、COMMIT显式控制事务

(2) 用SET AUTOCOMMIT修改自动提交模式

总结:


前言

在当今数据驱动的时代,数据库的高效与可靠性是业务系统的核心支柱,而索引和事务作为数据库的两大基石,直接影响着数据查询性能与操作安全性。索引是一个排序的列表,可通过存储索引值及对应数据行的物理地址加速查询,避免全表扫描,但其创建和维护需占用额外磁盘空间,且存在多种分类及创建原则;事务则用于处理操作量大、复杂度高的数据,通过原子性、一致性、隔离性和持久性(ACID 原则)保障数据完整性,确保成批 SQL 语句要么全部执行、要么全部不执行,其控制语句及处理方法在维护数据库一致性方面至关重要。本课程将深入解析索引的本质、分类及优化策略,同时剖析事务的底层逻辑与应用场景,助力掌握提升数据库效能的核心技术。

一、MySQL 索引介绍

1. 索引概述

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

当数据保存在磁盘类存储介质上时,它是作为数据块存放。这些数据块是被当作一个整体来访问的,这样可以保证操作的原子性。硬盘数据块存储结构类似于链表,都包含数据部分,以及一个指向下一个节点 (或数据块) 的指针,不需要连续存储。

记录集只能在某个关键字段上进行排序,所以如果需要在一个无序字段上进行搜索,就要执行一个线性搜索 (Linear Search) 的过程,平均需要访问 N/2 的数据块,N 是表示所占据的数据块数目。如果这个字段是一个非主键字段 (也就是说,不包含唯一的访问入口), 那么需要在 N 个数据块上搜索整个表格空间。

但是对于一个有序字段,可以运用二分查找 (Binary Search), 这样只需要访问 log₂(N) 的数据块。这就是为什么数据表使用索引后性能可以得到本质上提高的原因。

索引是对记录集的多个字段进行排序的方法。在一张表中为一个字段创建一个索引,将创建另外一个数据结构,包含字段数值以及指向相关记录的指针,然后对这个索引结构进行排序,允许在该数据上进行二分法排序。

使用索引的副作用是需要额外的磁盘空间。对于 MyISAM 引擎而言,这些索引是被统一保存在一张表中的。如果很多字段都建立了索引,那么会占用大量的磁盘空间,这个文件将很快到达底层文件系统所能够支持的大小限制。

2. 索引作用

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

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

 mysql>SELECT c1, c2,c3 FROM t1,t2,t3 WHERE c1=c2 AND c1=c3;  

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

如果对每个表进行索引,就能极大地加速查询进程,利用索引的查询处理如下。

  • 从表 t1 中选择第一行,查看此行所包含的数据。

  • 使用表 t2 上的索引,直接定位 t2 中与 t1 的值匹配的行。同理,利用表 t3 上的索引,直接定位 t3 中与 t1 的值匹配的行。

  • 扫描表 t1 的下一行并重复前面的过程,直到遍历 t1 中所有的行。

在此情形下,仍然对表 t1 执行了一个完全扫描,但能够在表 t2 和 t3 上进行索引查找直接取出这些表中的行,比未用索引时要快一百万倍。

利用索引,MySQL 加速了 WHERE 子句满足条件行的搜索,而在多表连接查询时、在执行连接时加快了与其他表中的行匹配的速度。

3. 索引的分类

在数据库表中,对字段建立索引可以大大提高查询速度。通过善用这些索引可以令 MySQL 的查询和运行更加高效。索引是快速搜索的关键。MySQL 索引的建立对于 MySQL 的高效运行是非常重要的。下面介绍几种常见的 MySQL 索引类型。

从物理存储的角度来划分,索引分为聚簇索引和非聚簇索引两种,聚簇索引是按照数据存放的物理位置为顺序的,而非聚簇索引就不一样了;聚簇索引能提高多行检索的速度,而非聚簇索引对于单行的检索更快。

从逻辑的角度来划分,索引分为普通索引、唯一索引、主键索引、组合索引和全文索引。这些索引分类的具体解释如下所示。

3.1 普通索引

普通索引是最基本的索引,它没有任何限制,也是大多数情况下用到的索引。它有以下几种创建方式。

  • 直接创建索引:

 mysql>CREATE INDEX index_name ON table_name (column(length)); 

column 是指定要创建索引的列名。通常可以考虑将查询语句中在 JOIN 子句和 WHERE 子句里经常出现的列作为索引列。

其中 length 是可选项。如果忽略 length 的值,则使用整个列的值作为索引。如果指定使用列前的 length 个字符来创建索引,就是使用列的一部分来创建索引,这样有利于减小索引文件的大小,节省索引列所占的空间。在某些情况下,只能对列的前缀进行索引。索引列的长度有一个最大上限 255 个字节 (MyISAM 和 InnoDB 表的最大上限为 1000 个字节), 如果索引列的长度超过了这个上限,就只能用列的前缀进行索引。另外,BLOB 或 TEXT 类型的列也必须使用前缀索引。column 和 length 的含义,在下面创建索引的操作语句中意义相同。

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

 mysql>ALTER TABLE table_name ADD INDEX index_name (column(length));  
  • 创建表结构时,同时创建索引:

mysql> create table t3(id int(10),name char(20),age int(10),index ccc(name)) ;
Query OK, 0 rows affected, 2 warnings (0.03 sec)
3.2 唯一索引

唯一索引与普通索引类似,不同的就是:唯一索引的索引列的值必须唯一,但允许有空值 (注意和主键不同)。如果是组合索引,则列值的组合必须唯一。唯一索引创建方法和普通索引类似。

  • 创建唯一索引:

mysql> create unique index ddd on t2(id);
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0
  • 修改表结构的时候添加唯一索引:

mysql> alter table t1 add unique aaa(id);
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0
  • 创建表的时候同时创建唯一索引:

mysql> create table t1(id int(10),name char(20),age int(10), unique aaa(name)) ;
Query OK, 0 rows affected, 2 warnings (0.03 sec)
3.3 主键索引

主键索引是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值。一般是在建表的时候同时创建主键索引。

mysql> create table t4(id int(10),name char(20),age int(10),index ccc(name),primary key(id));
3.4 组合索引 (最左前缀)

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

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

mysql> create table t5 (name varchar(20),time int(20),age int(20),index t5(name,time,age) );
Query OK, 0 rows affected, 2 warnings (0.02 sec)

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

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

mysql> select * from t5 where ('zhangsan' and 'zhangsan' and 'zhangsan');
Empty set, 1 warning (0.00 sec)

如果采用此查询方式,这条组合索引将无效化,所以一般在建立索引时,要先想好相应的查询业务,尽量避免虽然有索引,但是使用不上的问题。

3.5 全文索引 (FULLTEXT)

MySQL 从 3.23.23 版开始支持全文索引和全文检索。在 MySQL5.6 版本以前,FULLTEXT 索引仅可用于 MyISAM 表,在 5.6 之后 InnoDB 引擎也支持 FULLTEXT 索引:它们可以从 CHAR、VARCHAR 或 TEXT 列中作为 CREATE TABLE 语句的一部分被创建,或是随后使用 ALTER TABLE 或 CREATE INDEX 被添加。

对于较大的数据集,将资料输入一个没有 FULLTEXT 索引的表中,然后创建索引,其速度比把资料输入现有 FULLTEXT 索引的速度更快。不过切记对于大容量的数据表,生成全文索引是一个非常消耗时间、非常消耗硬盘空间的做法。

  • 创建表的全文索引:

mysql> create table t6 (name varchar(20),time int(20),age int(20),fulltext (name));
Query OK, 0 rows affected, 2 warnings (0.08 sec)
  • 修改表结构添加全文索引:

mysql> alter table t1 add fulltext t1(name);
Query OK, 0 rows affected, 1 warning (0.08 sec)
Records: 0  Duplicates: 0  Warnings: 1
  • 直接创建索引:

ysql> create fulltext index eee on t2(name);
3.6 创建索引的原则依据

数据库建立索引的原则:

  1. 确定针对该表的操作是大量的查询操作还是大量的增删改操作;

  2. 尝试建立索引来帮助特定的查询。检查自己的 sql 语句,为那些频繁在 where 子句中出现的字段建立索引;

  3. 尝试建立复合索引来进一步提高系统性能。修改复合索引将消耗更长时间,同时复合索引也占磁盘空间;

  4. 对于小型的表,建立索引可能会影响性能;

  5. 应该避免对具有较少值的字段进行索引;

  6. 避免选择大型数据类型的列作为索引。

索引建立的原则:

  • 在经常用作过滤器的字段上建立索引;

  • 在 SQL 语句中经常进行 GROUP BY、ORDER BY 的字段上建立索引;

  • 在不同值较少的字段上不必要建立索引,如性别字段;

  • 对于经常存取的列避免建立索引;

  • 用于联接的列 (主键 / 外键) 上建立索引;

  • 在经常存取的多个列上建立复合索引,但要注意复合索引的建立顺序要按照使用的频度来确定;

  • 缺省情况下建立的是非簇集索引,但在以下情况下最好考虑簇集索引,如:含有限数目 (不是很少) 唯一的列;进行大范围的查询;充分的利用索引可以减少表扫描 I/O 的次数,有效的避免对整表的搜索。当然合理的索引要建立在对各种查询的分析和预测中,也取决于 DBA 所设计的数据库结构。

3.7 查看索引

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

 mysql>show index from t1;  mysql>shlename;  ow keys from t1;

以 renyuan 表为例,查看 renyuan 表的索引内容。

mysql> show index from t1\G;
*************************** 1. row ***************************Table: t1Non_unique: 1Key_name: aaaSeq_in_index: 1Column_name: nameCollation: ACardinality: 0Sub_part: NULLPacked: NULLNull: YESIndex_type: BTREEComment: 
Index_comment: Visible: YESExpression: NULL
1 row in set (0.02 sec)

字段解析:

  • Table: 表的名称。

  • Non_unique: 如果索引不能包括重复词,则为 0; 如果可以,则为 1。

  • Key_name: 索引的名称。

  • Seq_in_index: 索引中的列序号,从 1 开始。

  • Column_name: 列名称

  • Collation: 列以什么方式存储在索引中。在 MySQL 中,有值 "A'(升序) 或 NULL (无分类)。

  • Cardinality: 索引中唯一值数目的估计值。通过运行 ANALYZE TABLE 或 myisamchk-a 可以更新。基数根据被存储为整数的统计数据来计数,所以即使对于小型表,该值也没有必要是精确的。基数越大,当进行联合时,MySQL 使用该索引的机会就越大。

  • Sub_part: 如果列只是被部分地编入索引,则为被编入索引的字符的数目。如果整列被编入索引,则为 NULL。

  • Packed: 指示关键字如何被压缩。如果没有被压缩,则为 NULL。

  • Null: 如果列含有 NULL, 则含有 YES。如果没有,则该列含有 NO。

  • Inde_type: 用过的索引方法 (BTREE,FULLTEXT, HASH, RTREE)。

  • Comment: 备注。

3.8 删除索引

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

 DROP INDEX索引名ON表名;  ALTER TABLE表名DROP INDEX索引名;  
mysql> drop index aaa on t1; 
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> alter table t1 drop index t1;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

 

二、MySQL 事务

MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,要删除一个人员,即需要删除人员的基本资料,又需要删除和该人员相关的信息,如信箱,文章等等。这样,这些数据库操作语句就构成一个事务!

在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。

事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。

事务用来管理 insert,update,delete 语句。

一般来说,事务是必须满足 4 个条件 (ACID): 原子性 (Atomicity, 或称不可分割性)、一致性 (Consistency)、隔离性 (Isolation, 又称独立性)、持久性 (Durability)。

1. 事务的 ACID 原则

  • 原子性: 一个事务 (transaction) 中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚 (Rollback) 到事务开始前的状态,就像这个事务从来没有执行过一样;

  • 一致性: 在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作;

  • 隔离性: 数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交 (Read uncommitted)、读提交 (read commited)、可重复读 (repeatable read) 和串行化 (Serializable);

  • 持久性: 事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

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

事务控制语句包含:

  • BEGINSTART TRANSACTION: 显式地开启一个事务;

  • COMMIT: 也可以使用COMMIT WORK, 二者等价。COMMIT 会提交事务,并使已对数据库进行的所有修改变为永久性的;

  • ROLLBACK: 也可以使用ROLLBACK WORK, 二者等价。回滚会结束用户的事务,并撤销正在进行的所有未提交的修改;

  • SAVEPOINT identifier: 在事务中创建一个保存点,一个事务中可以有多个 SAVEPOINT;

  • RELEASE SAVEPOINT identifier: 删除指定的事务保存点,若未指定保存点则抛出异常;

  • ROLLBACK TO identifier: 把事务回滚到指定的保存点;

  • SET TRANSACTION: 设置事务的隔离级别。InnoDB 存储引擎支持的隔离级别包括READ UNCOMMITTEDREAD COMMITTEDREPEATABLE READ(默认) 和SERIALIZABLE

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

(1) 用BEGINROLLBACKCOMMIT显式控制事务
因为现在MySQL软件都自动提交设置,所以使用事务没什么意义,关闭自动提交,在进行操作
(2) 用SET AUTOCOMMIT修改自动提交模式
mysql> set autocommit=0;
Query OK, 0 rows affected (0.00 sec)mysql> insert into t2 values(4,'aaaa',23);
Query OK, 1 row affected (0.00 sec)mysql> select * from t2;
+------+----------+------+
| id   | name     | age  |
+------+----------+------+
|    1 | zhangsan |   10 |
|    2 | wangwu   |   20 |
|    3 | liuliu   |   20 |
|    4 | aaaa     |   23 |
+------+----------+------+
4 rows in set (0.00 sec)mysql> rollback;
Query OK, 0 rows affected (0.01 sec)mysql> select * from t2;
+------+----------+------+
| id   | name     | age  |
+------+----------+------+
|    1 | zhangsan |   10 |
|    2 | wangwu   |   20 |
+------+----------+------+
2 rows in set (0.00 sec)

总结:

MySQL索引与事务是数据库性能与完整性的两大核心。索引通过有序列表存储字段值与物理地址,加速查询但占用额外空间,包含聚簇/非聚簇索引及普通、唯一、主键等类型,需遵循创建原则并注意最左前缀规则。事务通过ACID原则确保数据一致性,支持显式控制(BEGIN/COMMIT/ROLLBACK)和自动提交模式修改。合理使用索引和事务能显著提升数据库效率和数据可靠性。

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

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

相关文章

HTML实战项目:高考加油和中考加油

设计思路 页面加载后会自动显示高考内容,点击顶部按钮可以切换到中考内容。倒计时会每秒更新,为考生提供实时的备考时间参考。 使用代表希望的蓝色和金色渐变作为主色调 顶部导航栏可切换高考/中考内容 添加动态倒计时功能 设计励志名言卡片和备考小贴…

What is Predictive Maintenance (PdM)? Learn How Industrial IoT Enables PdM

文章大纲 从预防性维护到预测性维护服务的转变传统预防性维护的局限性预测性维护的定义工业物联网(IIoT)如何助力预测性维护预测性维护带来的成本效益实施预测性维护面临的挑战企业转向预测性维护的原因参考文献大家好!今天,让我们一起深入了解一下预测性维护技术。它正在彻…

CCPC shandong 2025 G

题目链接:https://codeforces.com/gym/105930/problem/G 题目背景: n 名工人加工 m 个工件,第 i 个工件在第 ti 分钟的开头加入 工人 wi 的收件箱。 每分钟,工人从收件箱里拿出一个工件,完成加工后放入下 一个工人的收…

UE路径追踪Path Tracing和Lumen的区别

在Unreal Engine(UE,虚幻引擎)中,Path Tracing 和 Lumen 是两种不同的全局光照(Global Illumination, GI)和反射技术,各自适用于不同的使用场景。以下是它们的主要区别: &#x1f31…

JaCoCo 是什么

JaCoCo(Java Code Coverage)是一款广泛使用的 Java 代码覆盖率工具,用于分析测试用例对项目代码的覆盖程度,帮助开发者识别未被测试的代码区域,从而提升软件质量。它通常与 JUnit、TestNG 等测试框架及 Maven、Gradle …

火山引擎扣子系列

您提到的“火山引擎扣子系列”指的应该是 **火山引擎推出的智能AI对话开发与应用平台——Coze(中文名:扣子)**。这是一个由字节跳动旗下火山引擎开发的、面向开发者和非技术用户的**低代码/无代码AI Bot开发平台**,旨在帮助用户快…

OpenLayers 加载ArcGIS瓦片数据

注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 随着GIS应用的不断发展,Web地图也越来越丰富,除了像ESRI、超图、中地数码这样GIS厂商有各自的数据源格式,也有Google…

大模型是什么?

大模型,英文名叫Large Model,也被称为基础模型(Foundation Model)。我们通常说的大模型,主要指的是其中最常用的一类——大语言模型(Large Language Model,简称LLM)。除此之外&#…

LLaMaFactory 微调QwenCoder模型

步骤一:准备LLamaFactory环境 首先,让我们尝试使用github的方式克隆仓库: git config --global http.sslVerify false && git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git # 创建新环境,指定 Python 版本(以 3.…

【位运算】判断字符是否唯⼀(easy)

33. 判断字符是否唯⼀(easy) 题⽬描述:解法(位图的思想):C 算法代码:Java 算法代码: 题⽬链接:⾯试题 01.01. 判定字符是否唯⼀ 题⽬描述: 实现⼀个算法&…

满天星之canvas实现【canvas】

展示 文章目录 展示Canvas 介绍【基础】简介兼容性关键特性注意事项应用场景:基本示例 满天星代码实现【重点】代码解释 全量代码【来吧,尽情复制吧少年】html引入JS代码 参考资源 Canvas 介绍【基础】 简介 Canvas是一个基于HTML5的绘图技术&#xff0…

可视化提示词(Prompt)在训练过程中的优化过程:visualize_prompt_evolution

可视化提示词(Prompt)在训练过程中的优化过程:visualize_prompt_evolution 这个函数 visualize_prompt_evolution 的作用是可视化提示词(Prompt)在训练过程中的优化过程,通过对比每个训练轮次(Epoch)的提示词与初始提示词的差异,直观展示哪些Token被保留、哪些被修改…

2025 一带一路暨金砖国家技能发展与技术创新大赛 第一届“信创适配及安全管理赛项”样题

2025 一带一路暨金砖国家技能发展与技术创新大赛 第一届“信创适配及安全管理赛项”样题 模块A-理论知识:模块B-适配环境搭建:系统安装与配置:DNS 服务配置:DNS 服务配置:CA 服务配置:Httpd 服务配置&#…

Qt Creator调用Python代码

Qt Creator调用Python代码 项目场景:现在我写的Qt上位机,需要调用同事使用python写的代码,所以我需要一个整合,把同事的代码融合进我的Qt工程里来。 所以,本篇记录Qt Creator中调用Python的一种方法。 操作系统:windows 11 64位 Python使用的版本为 3.9.10,(安装参…

【QQ音乐】sign签名| data参数 | AES-GCM加密 | webpack(上)

1.目标 网址:https://y.qq.com/n/ryqq/toplist/26 切换榜单出现请求,可以看到sign和data是加密的 2.逆向分析 搜索sign: 可以看到sign P(n.data),而n.data就是请求的加密data参数 data {"comm":{"cv":4747474,&qu…

uni-app(6):Vue3语法基础下

1 列表渲染 1.1 在 v-for 里使用数组 v-for 指令可以实现基于一个数组来渲染一个列表。v-for 指令需要使用 item in items 形式的特殊语法,其中 items 是源数据数组,而 item 则是被迭代的数组元素的别名。 在 v-for 块中,我们可以访问所有父…

STM32之SPI——外部FLASH和RFID

一、SPI协议的原理与应用 基本概念 串行外设接口SPI(Serial Peripheral Interface)是由美国摩托罗拉公司最先推出的一种同步串行传输规范,也是一种单片机外设芯片串行外设扩展接口。该接口是一种高速、全双工、同步的通信总线,并…

51c视觉~3D~合集3

我自己的原文哦~ https://blog.51cto.com/whaosoft/13954440 #SceneTracker 在4D时空中追踪万物!国防科大提出首个长时场景流估计方法 本篇分享 TPAMI 2025 论文​​SceneTracker: Long-term Scene Flow Estimation Network​​,国防科大提出首…

cf2059B

原题链接:https://codeforces.com/contest/2059/problem/B 题目背景: 将一个长度为 n 的数组 a 划分为 k 个数组,再将所有偶数索引的数组合并成 b 数组,定义代价为 的最小索引 i ,可得到的最小代价为多少。 思路&am…

爬虫到智能数据分析:Bright Data × Kimi 智能洞察亚马逊电商产品销售潜力

前言 电商数据分析在现代商业中具有重要的战略价值,通过对消费者行为、销售趋势、商品价格、库存等数据的深入分析,企业能够获得对市场动态的精准洞察,优化运营决策,预测市场趋势、优化广告投放、提升供应链效率,并通…