深入理解mysql索引

一、什么是索引?

索引(Index) 是数据库管理系统中一种特殊的数据结构,存储在磁盘上。它包含对数据表中一列或多列的值进行排序,并存储了指向表中实际数据行物理位置或主键值的引用指针。可以把它类比为书籍的目录,能够帮助数据库系统快速定位到符合查询条件的数据,而无需扫描整个数据表。

二、索引的作用

  1. 快速定位与检索数据: 这是索引最核心的作用。通过索引,数据库可以避免全表扫描,直接跳转到目标数据所在的位置,极大地缩短数据查询的时间。
  2. 提高数据库性能: 通过加速查询操作,索引能够有效提升数据库的整体性能,尤其是对于读密集型的应用。
  3. (间接作用)保证数据的唯一性: 唯一索引可以确保索引列中的所有值都是唯一的。
  4. (间接作用)加速表连接: 对用于连接的列(如外键)创建索引,可以显著提高表连接的效率。
  5. (间接作用)加速排序和分组: 如果 ORDER BYGROUP BY 子句中的列有索引,MySQL 可以利用索引的有序性来避免额外的排序操作。

三、索引的缺点

虽然索引能带来巨大的性能提升,但它并非没有代价:

  1. 空间消耗: 索引本身也需要占用磁盘空间。数据量越大,索引占用的空间也越大。这是一种典型的“以空间换时间”的策略。对于大多数后端应用而言,磁盘成本相对较低,通常可以接受。
  2. 影响写操作效率(增、删、改):
    • 当对表中的数据进行 INSERTDELETEUPDATE 操作时,数据库不仅要修改数据本身,还需要同步维护索引结构(例如,B+树的节点分裂、合并、键值调整等)。
    • 这通常会导致写操作的效率降低。虽然在极少数特定更新场景下影响可能不明显,但总体趋势是写操作的开销会增加。

权衡利弊: 尽管存在上述缺点,但在实际开发中,索引的使用仍然是必不可少的。主要原因有:

  1. 磁盘空间通常不是主要矛盾,其成本远低于因查询缓慢导致的用户体验下降或系统资源浪费。
  2. 在大多数应用场景中,读操作(查询)的频率远高于写操作。因此,通过索引提升查询性能带来的整体效益往往远大于其对写操作的轻微影响。

四、何时使用索引?(使用场景)

在决定是否对数据表的某一列或多列创建索引时,需要综合考虑以下几点:

适合创建索引的场景:

  • 数据量较大的表: 对于小表,全表扫描可能比走索引更快。索引的优势在大表上才能充分体现。
  • 经常作为查询条件的列: 即经常出现在 WHERE 子句中的列。
  • 经常用于表连接的列: 通常是外键列。
  • 经常需要排序的列: 即经常出现在 ORDER BY 子句中的列。如果排序方向与索引一致,效果更佳。
  • 经常需要分组统计的列: 即经常出现在 GROUP BY 子句中的列。
  • 高基数性(高区分度)的列: 列中不同值的数量越多,索引的选择性就越好,查询效率提升越明显。

不适合或需谨慎创建索引的场景:

  • 数据量非常小的表: 全表扫描效率可能更高,索引反而增加开销。
  • 写操作远多于读操作的表: 维护索引的代价可能会超过查询带来的收益。
  • 低基数性的列: 列中只有很少的唯一值(例如:性别列,只有男、女、未知)。索引选择性差,优化效果不明显,还浪费空间。
  • 很少被查询或引用的列: 创建索引没有意义。
  • 经常被修改的列: 如果某列的值频繁更新,那么维护该列索引的代价会比较大。
  • 过长的文本字段: 对非常长的文本字段直接创建完整索引会占用大量空间且效率不高,可以考虑使用前缀索引或全文索引。

五、使用

1. 查看索引

SHOW INDEX FROM 表名;

或者查看建表语句,其中也包含了索引信息:

SHOW CREATE TABLE 表名;

2. 创建索引

MySQL 支持多种类型的索引,创建语法略有不同。

普通索引(INDEX): 最基本的索引,没有任何限制。

CREATE INDEX 索引名 ON 表名(字段名1, 字段名2, ...);
-- 或者
ALTER TABLE 表名 ADD INDEX 索引名 (字段名1, 字段名2, ...);

字段名1, 字段名2, … 表示可以创建复合索引(联合索引)。

唯一索引(UNIQUE INDEX): 索引列的值必须唯一,但允许有空值(NULL)。如果是复合索引,则列值的组合必须唯一。

CREATE UNIQUE INDEX 索引名 ON 表名(字段名);
-- 或者
ALTER TABLE 表名 ADD UNIQUE INDEX 索引名 (字段名);
-- 或者在定义表时指定
-- CREATE TABLE 表名 (
--     id INT PRIMARY KEY,
--     email VARCHAR(100) UNIQUE,
--     ...
-- );

主键索引(PRIMARY KEY): 一种特殊的唯一索引,不允许有空值。一张表只能有一个主键索引。

-- 通常在创建表时定义
CREATE TABLE 表名 (id INT PRIMARY KEY,...
);
-- 或者通过 ALTER TABLE 添加
ALTER TABLE 表名 ADD PRIMARY KEY (字段名);

创建主键约束时,会自动创建对应列的主键索引。

外键约束(FOREIGN KEY):
当创建外键约束时,MySQL 也会自动在引用列上创建索引(如果尚不存在),以提高连接和约束检查的效率。

全文索引(FULLTEXT INDEX): 用于对文本内容进行全文搜索,通常用于 CHAR, VARCHAR, TEXT 类型的列。

CREATE FULLTEXT INDEX 索引名 ON 表名(字段名);
-- 或者
ALTER TABLE 表名 ADD FULLTEXT (字段名);

删除索引

DROP INDEX 索引名 ON 表名;

或者:

ALTER TABLE 表名 DROP INDEX 索引名;

对于主键索引,删除方式特殊:

ALTER TABLE 表名 DROP PRIMARY KEY;

六、索引背后的数据结构

为什么数据库索引普遍选择 B+ 树而不是其他数据结构(如哈希表、二叉搜索树)呢?

1. 为什么不选择哈希表?
哈希表通过哈希函数将键映射到存储位置,理论上等值查询(= 或 IN)的时间复杂度可以达到 O(1),非常快。但是:

  • 不支持范围查询或顺序访问: 哈希表存储的数据是无序的,无法高效处理 >、<、BETWEEN 等范围查询,也无法支持 ORDER BY 操作。
  • 不支持模糊查询: 无法直接支持 LIKE ‘keyword%’ 这样的模糊查询。
  • 哈希冲突问题: 当发生哈希冲突时,需要额外的机制(如链地址法)来解决,这会降低查询效率。
  • 内存数据库更适用: MySQL 的 Memory 存储引擎支持哈希索引,因为它主要在内存中操作,但对于磁盘存储引擎(如 InnoDB, MyISAM),磁盘 I/O 是主要瓶颈,哈希表的优势不明显。

2. 为什么不选择二叉搜索树(BST)或平衡二叉搜索树(AVL树、红黑树)?
二叉搜索树(及其平衡变种)能够保持数据有序,支持范围查询。但是:

  • 树高问题导致磁盘 I/O 过多: 当数据量非常大时,即使是平衡二叉树,其高度也会相对较高。数据库索引
  • 通常存储在磁盘上,每次访问树的一个节点都可能对应一次磁盘 I/O 操作。树越高,I/O 次数就越多,查询效率越低。
  • 节点存储信息量少: 每个节点只存储一个键值和两个子节点指针,对于磁盘存储来说,这没有充分利用磁盘预读(通常一次 I/O 会读取一页或一块数据)的特性。

3. B+ 树:为数据库索引量身定做
MySQL(尤其是 InnoDB 存储引擎)普遍采用 B+ 树 作为索引的数据结构。

B 树(B-Tree)简介: B 树是一种自平衡的 N 叉搜索树(N 通常远大于 2)。它的特点是每个节点可以存储多个键值和多个指向子节点的指针,从而降低树的高度。

B+ 树的改进: B+ 树是在 B 树的基础上进行优化的,更适合数据库索引。

B+树示例
在这里插入图片描述
图示:一个简化的 B+ 树示例。非叶子节点存储索引 key,作为导航;叶子节点存储所有 key 并形成有序双向链表,可能直接存储数据(聚簇索引)或指向数据的指针(非聚簇索引)。

B+ 树的特点:

  1. N 叉搜索树: 每个节点可以包含多个关键字(通常远大于2),这使得树的阶数(fan-out)很高,从而树的高度非常低。

  2. 非叶子节点冗余关键字: 非叶子节点只存储关键字(索引)和指向下一级子节点的指针,不存储实际数据。这些关键字会作为其对应子树中叶子节点所管理区间的最大(或最小)值。

  3. 所有数据(或指向数据的指针)都在叶子节点: 所有的查询最终都会落到叶子节点。叶子节点包含了所有索引键值。

    • 对于聚簇索引(Clustered Index,如 InnoDB 的主键索引),叶子节点直接存储完整的数据行。
    • 对于非聚簇索引(Secondary/Non-Clustered Index,如 InnoDB 的辅助索引或 MyISAM 的索引),叶子节点存储的是索引键值和指向实际数据行的指针(InnoDB 辅助索引存的是主键值,MyISAM 存的是数据文件的物理地址)。
  4. 叶子节点通过双向链表连接: 所有叶子节点按照键值顺序被串联起来,形成一个有序的双向链表。
    B+ 树的优势:

  5. 极低的树高,减少磁盘 I/O: 由于 N 叉的特性,即使存储大量数据,B+ 树的高度也非常低(通常 3-4 层就能支持千万级别的数据)。这意味着从根节点到叶子节点的路径很短,大大减少了磁盘 I/O 次数。

  6. 高效的范围查询和排序: 叶子节点通过双向链表连接,使得范围查询(如 BETWEEN, >, <)和排序(ORDER BY)操作非常高效,只需在叶子节点层进行顺序扫描。

  7. 稳定的查询性能: 任何一次查询(无论是单点查询还是范围查询的起点定位)都需要从根节点走到某个叶子节点,查询路径长度基本一致,IO 次数稳定。

  8. 非叶子节点更小,利于缓存: 非叶子节点不存储实际数据行,只存储索引键和指针,因此它们占用的空间较小。这使得更多的非叶子节点可以被加载到内存中进行缓存,进一步减少了磁盘 I/O。

七、MySQL 常见索引类型详解

1. 聚簇索引 (Clustered Index)

  • 定义: 数据行的物理存储顺序与索引顺序一致的索引。一张表只能有一个聚簇索引。
  • InnoDB:
    • InnoDB 表是索引组织表,数据本身就是按照聚簇索引的顺序存储的。
    • 如果你定义了 PRIMARY KEY,那么主键就是聚簇索引。
    • 如果你没有定义 PRIMARY KEY,InnoDB 会选择第一个 UNIQUE NOT NULL 的索引作为聚簇索引。
    • 如果两者都没有,InnoDB 会自动生成一个隐藏的 6 字节的 ROWID 作为聚簇索引。
  • 优点: 基于聚簇索引的查询速度非常快,因为可以直接定位到数据行。
  • 缺点:
    • 维护成本较高,插入新行或主键更新(不推荐)可能导致数据页分裂。
    • 辅助索引查找需要两次索引查找(先查到主键值,再通过主键值查数据行),也称为“回表”。

2. 非聚簇索引 (Secondary / Non-Clustered Index)

  • 定义: 数据行的物理存储顺序与索引顺序不一致。一张表可以有多个非聚簇索引。
  • InnoDB: 辅助索引(除主键索引外的其他索引)都是非聚簇索引。其叶子节点存储的是索引列的值和对应行的数据的主键值
  • MyISAM: MyISAM 表的所有索引(包括主键索引)都是非聚簇索引。其叶子节点存储的是索引列的值和对应行的数据在磁盘上的物理地址(指针)
  • 优点: 维护成本相对较低。
  • 缺点: 查询时可能需要“回表”操作(除非是覆盖索引)。

3. 覆盖索引 (Covering Index)

  • 定义: 如果一个索引包含了查询语句中 SELECTWHEREORDER BYGROUP BY 所需的所有列,那么数据库引擎就可以直接从该索引中获取所有数据,而无需再访问数据表本身(即无需“回表”)。这种索引就称为覆盖索引。
  • 优点: 极大地提高了查询性能,避免了回表操作的额外 I/O。
  • 示例:users(name, age) 的联合索引。查询 SELECT name, age FROM users WHERE name = 'Alice'; 就可以使用覆盖索引。

4. 联合索引 (Composite / Compound Index) 与最左前缀匹配原则

  • 定义: 对表上的多个列组合起来创建的索引。
  • 最左前缀匹配原则: 这是使用联合索引时非常重要的一个原则。当查询条件使用了联合索引中的最左边连续的若干个列时,索引才会被有效利用。
    • 例如,有一个联合索引 idx_abc (a, b, c)
      • WHERE a = 1:可以用到索引。
      • WHERE a = 1 AND b = 2:可以用到索引。
      • WHERE a = 1 AND b = 2 AND c = 3:可以用到索引。
      • WHERE a = 1 AND c = 3:只能用到索引 a 部分,c 部分用不到。
      • WHERE b = 2 AND c = 3:无法用到该索引(除非有其他以b开头的索引)。
  • 顺序很重要: 创建联合索引时,列的顺序非常关键。通常将选择性高(区分度大)且最常用的列放在最左边。

八、索引失效的常见场景

即使创建了索引,某些查询也可能无法有效利用索引,导致性能下降。以下是一些常见的索引失效场景:

  1. 在索引列上使用函数或进行计算:
    WHERE YEAR(create_time) = 2024; (应改为 WHERE create_time >= '2024-01-01' AND create_time < '2025-01-01';)
    WHERE score / 10 = 9; (应改为 WHERE score >= 90 AND score < 100;)
  2. WHERE 子句中使用 OR 连接条件:
    如果 OR 前后的条件列没有都建立索引,或者优化器认为全表扫描更快,索引可能失效。某些情况下优化器可能会尝试索引合并(Index Merge)。
  3. LIKE 查询以通配符 % 开头:
    WHERE name LIKE '%keyword'; (索引失效)
    WHERE name LIKE 'keyword%'; (索引有效,会走范围扫描)
  4. 字符串类型字段查询时不加引号(隐式类型转换):
    如果 phone 列是 VARCHAR 类型:WHERE phone = 12345678901; (可能发生隐式类型转换,导致索引失效,应为 WHERE phone = '12345678901';)
  5. 索引列数据类型不匹配或隐式转换。
  6. IS NULLIS NOT NULL
    • IS NULL 通常可以用到索引。
    • IS NOT NULL 在某些情况下可能用不到索引,取决于数据的NULL值分布和优化器判断。
  7. 范围查询右边的列索引失效:
    对于联合索引 (a, b, c),如果 WHERE a = 1 AND b > 10 AND c = 3;,那么 c 列的索引将无法使用,因为 b 列是范围查询。
  8. 优化器选择:
    有时即使查询符合索引使用规则,MySQL 优化器也可能基于成本估算(如判断回表代价过高或扫描数据量小)而选择全表扫描。可以使用 EXPLAIN 查看执行计划。
  9. 索引列区分度过低: 例如在性别列上建索引,优化器可能认为走索引意义不大。

九、索引设计原则

良好的索引设计是数据库性能优化的关键。

  1. 选择合适的列创建索引:
    • 经常用于 WHERE 子句的列。
    • 经常用于 ORDER BYGROUP BY 子句的列。
    • 经常用于表连接的列(外键)。
  2. 选择高基数性(高区分度)的列: 列中不同值的数量越多,索引的选择性越好。
  3. 使用短索引(前缀索引): 对于 VARCHARTEXT 等长字符串列,如果只需要索引前面一部分字符就能保证足够的区分度,可以创建前缀索引,以节省空间和提高效率。CREATE INDEX idx_name_prefix ON users(name(10));
  4. 利用最左前缀匹配原则: 合理设计联合索引的列顺序。
  5. 尽量使用覆盖索引: 减少回表操作。
  6. 避免冗余和重复索引: 例如,有了主键索引 (id),再创建普通索引 (id) 就是冗余的。有了联合索引 (a, b),再创建索引 (a) 也是冗余的(除非有特殊场景需要单独的 (a) 索引)。
  7. 索引并非越多越好: 每个额外的索引都会增加写操作的开销和存储空间。需要权衡利弊。
  8. 定期维护和审查索引: 随着业务发展和数据变化,一些索引可能不再适用或效率低下,需要定期检查并优化。可以使用 EXPLAIN 分析查询计划。
  9. 删除不再使用的索引: 避免不必要的开销。

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

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

相关文章

VMware vSphere Foundation 9.0 技术手册 —— Ⅰ 安装 ESXi 9.0 (虚拟机)

目录 1. 安装 ESXi 9.0 (虚拟机)&#xff08;1&#xff09;ESXi Standard Boot Menu&#xff08;2&#xff09;ESXi 安装导向&#xff08;3&#xff09;最终用户许可协议&#xff08;4&#xff09;选择系统盘&#xff08;5&#xff09;选择键盘类型&#xff08;6&#xff09;设…

UE5 游戏模板 —— TopDownGame 俯视角游戏

UE5 游戏模板 —— TopDownGame 俯视角游戏 前言一、模块导入二、TopDownGameMode三、TopDownPlayerController1、构造函数2、SetupInputComponent初始化新输入系统处理输入逻辑 四、TopDownCharacter五、射线检测总结 前言 上一篇文章介绍了一下PuzzleGame模板的流程&#xf…

基于深度学习的智能图像分割系统:技术与实践

前言 图像分割是计算机视觉领域中的一个核心任务&#xff0c;其目标是将图像划分为多个有意义的区域或对象。图像分割在医学影像分析、自动驾驶、安防监控等多个领域有着广泛的应用。近年来&#xff0c;深度学习技术&#xff0c;尤其是卷积神经网络&#xff08;CNN&#xff09;…

【学习笔记】2.2 Encoder-Decoder

参考资料&#xff1a;https://github.com/datawhalechina/happy-llm 在 Transformer 中&#xff0c;使用注意力机制的是其两个核心组件——Encoder&#xff08;编码器&#xff09;和 Decoder&#xff08;解码器&#xff09;。 2.2.1 Seq2Seq 模型 Seq2Seq&#xff08;序列到…

# 材料力学押题

材料力学押题 文章目录 材料力学押题第一题第二题组合变形弯曲变形 第一题 Q 求力作用的销钉位置的竖直偏移距离。 S 方法一:能量方法 材料应变能计算为: U ∫ 内力 2 2 刚度 d A U\int \frac{\text{内力}^2}{2\times 刚度}\text{d}A U∫2刚度内力2​dA 克拉珀龙原理&…

uniapp项目之小兔鲜儿小程序商城(一) 项目介绍,技术栈,小程序的基础架构,封装拦截器和请求函数

文章目录 一.项目介绍和前置内容1.重要链接2.技术栈 二.创建uniapp项目1.使用HBuilderX创建2.使用命令行创建3.如何使用vscode开发uniapp项目?step1:把项目拉入vscode,开始下相关插件step2:ts类型校验step3:设置json文件可以允许注释 4.pages.json文件的作用是什么?5.示例:在…

Uniapp H5端SEO优化全攻略:提升搜索引擎排名与流量

在移动互联网时代&#xff0c;H5页面因其跨平台、低成本、易传播的特性&#xff0c;成为许多企业的首选。Uniapp作为一款优秀的前端跨端开发框架&#xff0c;能够快速开发H5、小程序、App等多端应用。然而&#xff0c;由于Uniapp默认采用SPA&#xff08;单页应用&#xff09;架…

一[3.3]、ubuntu18.04环境 利用 yolov8 实现列车轨道检测,并提取正确的轨道线【全网最详细】

一、参考文献 https://blog.csdn.net/u010117029/category_12977729.html 一[3.2]、ubuntu18.04环境 利用 yolov8 训练开源列车数据集,并实现列车轨道检测【全网最详细】-CSDN博客 火车轨道铁路轨道检测识别(附带Python源码+详细解析)_轨道点云提取铁轨代码-CSDN博客

pp-ocrv5中的改进-跨阶段特征融合(CSP-PAN)以及在 Neck 部分引入 CSP-PAN后为何就能解决小文本漏检问题?

好的&#xff0c;我们来详细解析一下 PP-OCRv5 中的**跨阶段特征融合&#xff08;CSP-PAN&#xff09;**改进&#xff0c;以及它如何有效解决小文本漏检问题。 背景&#xff1a;PP-OCR 的 Neck 部分与 PAN 在 PP-OCRv3 及之前的版本中&#xff0c;Neck 部分使用的是标准的 **…

【数据分析四:Data Preprocessing】数据预处理

一、数据预处理 直接收集的数据通常是“脏的”&#xff1a; 不完整、不准确、不一致 数据预处理是进行大数据的分析和挖掘的工作中占工作量最大的一个步骤&#xff08;80%&#xff09; 二、处理缺失值 处理缺失数据的方法&#xff1a;首先确认缺失数据的影响 数据删除&#x…

一起来入门深度学习知识体系

前言 什么是深度学习&#xff1f;它有什么魔力&#xff1f; 想象一个机器人能识别人脸、写诗、翻译语言、甚至和你聊天。它是怎么学会这些能力的&#xff1f;答案正是——深度学习&#xff08;Deep Learning&#xff09;。 简单来说&#xff0c;深度学习就像是教会一台计算机…

Prompt+Agent+LLM:半导体炉管设备健康评估的落地实战

引言 在高端制造业的核心场景中&#xff0c;设备健康管理正面临前所未有的挑战。以半导体制造为例&#xff0c;一台价值数百万美元的炉管设备意外停机&#xff0c;可能导致整条产线瘫痪、晶圆批次报废&#xff0c;单日损失可达千万级。传统基于阈值规则的监控系统难以捕捉早期…

PostgreSQL的扩展bloom

PostgreSQL的扩展bloom 一、扩展概述 bloom 是 PostgreSQL 提供的一个基于**布隆过滤器(Bloom Filter)**的索引扩展&#xff0c;特别适合多列任意组合查询的优化场景。 二、核心特性 特性描述优势多列索引单索引支持多列组合减少索引数量模糊匹配高效处理和IN查询优于B-tre…

算法与数据结构学习之旅:从入门到进阶

在计算机科学的浩瀚宇宙中&#xff0c;算法与数据结构如同闪耀的恒星&#xff0c;驱动着整个程序世界的运转。无论是手机上流畅运行的 APP&#xff0c;还是搜索引擎瞬间返回的海量结果&#xff0c;背后都离不开算法与数据结构的精妙设计。对于想要深入探索计算机领域的开发者和…

C++map和set类(简介)

文章目录 一、关联式容器二、键值对三、树形结构的关联式容器3.1 set类的简介3.2 set的接口3.2.1 set的模版参数列表3.2.2 set的构造3.2.3 set的迭代器3.2.4 set的容量3.2.5 set的修改操作 3.3 set的使用案例3.4 multiset类的介绍3.5 multiset的使用案例3.6 map类的简介3.7 map…

圆柱电池自动化升级:面垫机如何破解生产痛点?

在圆柱电池的生产流程中&#xff0c;面垫&#xff08;绝缘垫片&#xff09;的安装是保障电池安全与性能的关键环节。传统手工操作不仅效率低&#xff0c;还容易出现面垫偏移、漏贴等问题&#xff0c;影响产品一致性。圆柱电池自动面垫机的出现&#xff0c;通过自动化技术解决了…

【AI Study】第四天,Pandas(1)- 基础知识

文章概要 本文详细介绍 Pandas 库的基础知识&#xff0c;包括&#xff1a; Pandas 的基本概念和特点安装和配置方法核心数据结构&#xff08;Series 和 DataFrame&#xff09;各种数据类型的处理方法实际应用示例 什么是 Pandas Pandas 是 Python 中最流行的数据分析库之一…

重构气血经络的数学模型:气血经络级联控制系统核心方程

从融智学视域&#xff0c;重构气血经络的数学模型 摘要&#xff1a; 融智学视域&#xff0c;通过三元耦合框架&#xff0c;重构气血经络模型&#xff0c;建立跨学科认知体系。五大分支协同运作&#xff1a;数学融智学构建纤维丛模型&#xff0c;逻辑融智学建立防歧义语义网&…

python爬虫:某网站价格数字加密破解

文章目录 前言一、案例二、破解流程1.原理2.找到woff文件3.分析woff文件4.代码实现1.转化woff文件2.绘图并ocr识别3.映射数据 三、总结 前言 有时我们在进行网页抓取采集数据时&#xff0c;有些重要的数据比如说价格,数量等信息会进行加密&#xff0c;通过复制或者简单的采集是…

DigitalOcean 携手 AMD 推出 AMD Instinct™ MI300X GPU Droplet,加速 AI 创新

近日&#xff0c;DigitalOcean&#xff08;NYS:DOCN&#xff09;作为全球最简单易用的可扩展云平台&#xff0c;宣布与 AMD 建立合作&#xff0c;为 DigitalOcean 客户提供 AMD Instinct™ GPU&#xff0c;以 AMD Instinct™ MI300X GPU Droplet 的形式支持其 AI 工作负载。此举…