详细了解索引规约

索引规约

在大厂中数据量非常庞大,也有很多高并发场景,因此在大厂中使用索引规约主要是为了规范索引的创建、使用及管理,确保数据库性能的高效与稳定,避免因随意或不合理创建索引带来诸如占用过多存储资源、影响数据更新效率等问题,同时让开发团队成员遵循统一标准,便于协作与维护,提升整体业务系统对海量数据处理的效率。

  • 尽量单表索引查找或操作数据(速度特快),更多的操作放在web应用中处理,数据库的扩容,操作麻烦,性能低

 

\1. 【强制】业务上具有唯一特性的字段,即使是组合字段,也必须建成唯一索引。

说明:不要以为唯一索引影响了 insert 速度,这个速度损耗可以忽略,但提高查找速度是明显的;另外,即使在应用层做了非常完善的校验控制,只要没有唯一索引,根据墨菲定律,必然有脏数据产生

  • 提高数据准确性:在应用层虽然可以做完善的校验控制,但由于各种复杂情况(如并发操作、代码逻辑漏洞、人为失误等),很难完全杜绝脏数据的产生。而唯一索引能够从数据库层面保证具有唯一特性的字段不会出现重复值,确保数据的完整性和准确性,符合业务规则要求。

  • 提升查找速度:数据库在执行查询操作时,对于设置了唯一索引的字段,能够利用索引结构快速定位到目标记录。例如,在用户表中用户名是唯一的,通过为用户名建立唯一索引,当根据用户名查找用户信息时(如 SELECT * FROM users WHERE username = '张三'),数据库可以直接通过索引快速找到对应的用户记录,而无需进行全表扫描,大大提高了查询效率,尤其在数据量较大的表中,这种查询速度的提升效果更为显著。

  • 可忽略的插入速度损耗:尽管在插入数据时,数据库需要额外检查唯一索引以确保插入的值不与已有值重复,这在一定程度上会增加插入操作的时间开销,但实际上这个损耗相对较小,相比于其带来的查询性能提升以及数据准确性保障,是可以接受的权衡。

 

\2. 【强制】超过三个表禁止 join。需要 join 的字段,数据类型保持绝对一致;多表关联查询时,保证被关联的字段需要有索引。

说明:即使双表 join 也要注意表索引、SQL 性能。

  • 控制查询复杂度与性能风险:当连接的表数量过多时,SQL 查询的逻辑会变得极为复杂,数据库在执行查询计划、进行表连接操作以及数据匹配时,需要消耗大量的系统资源,容易导致性能急剧下降。限制 join 表的数量在三个以内,有助于保持查询语句的可维护性和执行性能,避免出现因复杂的表连接导致的长时间查询等待情况,保障系统的响应速度。

  • 确保数据匹配准确性:要求 join 字段的数据类型保持绝对一致,可以避免因数据类型隐式转换带来的问题。如果数据类型不一致,数据库在进行连接操作时可能需要进行额外的转换操作,这不仅可能导致索引失效,还可能出现数据匹配错误的情况,保证数据类型一致能使表连接按照预期准确执行,得到正确的查询结果。

  • 提升连接查询效率:为被关联的字段建立索引,能够让数据库在执行多表关联查询时,快速定位到符合连接条件的数据行,减少全表扫描或者大量数据遍历的情况,显著提高查询性能。例如,在进行订单表、用户表、商品表的关联查询时,为订单表中的用户 ID 字段(关联用户表)和商品 ID 字段(关联商品表)分别建立索引,数据库就能基于这些索引快速找到相关记录进行连接操作,加快查询速度。

 

 

\3. 【强制】在 varchar 字段上建立索引时,必须指定索引长度,没必要对全字段建立索引,根据实际文本区分度决定索引长度。

说明:索引的长度与区分度是一对矛盾体,一般对字符串类型数据,长度为 20 的索引,区分度会高达 90%以上,可以使用 count(distinct left(列名, 索引长度))/count(*)的区分度来确定。

 

  • 节省磁盘空间:不指定索引长度对全 varchar 字段建立索引会占用较多的磁盘空间,因为索引本身需要存储相应的数据副本用于快速查找。而根据实际文本区分度合理指定索引长度,只对字段中具有较高区分度的部分建立索引,可以大大减少索引所占用的磁盘存储空间,提高磁盘利用率,尤其在处理大量文本数据的表中,这种空间节省效果更为明显。

  • 优化查询性能:索引长度并非越长越好,过长的索引可能导致查询效率下降,因为在索引查找过程中需要比较的数据量增多。通过分析文本区分度确定合适的索引长度,能够聚焦于最能区分不同记录的部分字段内容,在保证较高查询命中率的同时,加快索引查找速度,让数据库更快地定位到目标记录,提升查询性能。例如,对于一个文章标题字段(varchar 类型),若经过分析发现前 20 个字符的区分度能达到 90% 以上,那么只对这 20 个字符建立索引,既能满足大部分查询需求,又能提高查询效率。

 

\4. 【强制】页面搜索严禁左模糊或者全模糊,如果需要请走搜索引擎来解决。

说明:索引文件具有 B-Tree 的最左前缀匹配特性,如果左边的值未确定,那么无法使用此索引。

  • 充分利用索引特性:数据库中的索引文件大多具有 B-Tree 的最左前缀匹配特性,这意味着只有当查询条件从索引字段的最左边开始确定时,才能有效地利用索引进行快速查找。左模糊或全模糊查询(如 WHERE column LIKE '%abc'WHERE column LIKE '%abc%')不符合最左前缀匹配原则,会导致数据库无法利用索引,只能进行全表扫描,查询性能极差。遵守此规约可以引导开发人员采用符合索引特性的查询方式,保障查询效率。

  • 借助专业搜索引擎优势:专业的搜索引擎(如 Elasticsearch 等)专门针对文本的模糊搜索进行了优化,具备强大的全文检索功能、倒排索引等技术,能够高效地处理各种模糊搜索需求。当页面搜索有模糊搜索要求时,将其转移到专业搜索引擎上处理,可以在满足业务需求的同时,避免对数据库查询性能造成严重影响,提升用户的搜索体验。

 

\5. 【推荐】如果有 order by 的场景,请注意利用索引的有序性。order by 最后的字段是组合索引的一部分,并且放在索引组合顺序的最后,避免出现 file_sort 的情况,影响查询性能。

正例:where a=? and b=? order by c; 索引:a_b_c

反例:索引如果存在范围查询,那么索引有序性无法利用,如:WHERE a>10 ORDER BY b; 索引 a_b 无法排序。

 

  • 避免额外排序操作:数据库在执行查询并涉及 ORDER BY 操作时,如果能够按照索引的有序性来获取数据,就可以直接利用索引已经排好序的特点,无需再进行额外的排序操作(即避免出现 file_sort 情况)。例如,对于查询语句 WHERE a=? and b=? ORDER BY c,如果建立了 a_b_c 这样的组合索引,数据库可以基于该索引按照 c 字段的顺序直接获取有序的数据,大大提高查询效率,减少查询执行时间。

  • 提升查询性能:当出现 file_sort 时,数据库需要在内存或磁盘临时空间中对查询结果进行排序,这会消耗大量的系统资源,尤其是在处理大量数据时,会使查询变得非常缓慢。遵循此规约,合理构建和利用索引,能让数据库利用索引自身的有序性来满足排序需求,优化查询性能,提升系统的响应速度,改善用户体验

 

 

 

\6. 【推荐】利用覆盖索引来进行查询操作,避免回表。

说明:如果一本书需要知道第 11 章是什么标题,会翻开第 11 章对应的那一页吗?目录浏览一下就好,这个目录就是起到覆盖索引的作用。

正例:能够建立索引的种类分为主键索引、唯一索引、普通索引三种,而覆盖索引只是一种查询的一种效果,用 explain 的结果,extra 列会出现:using index。

  • 减少数据读取量:覆盖索引是指查询所需要的数据列都包含在索引中,数据库在执行查询时只需通过索引就能获取到全部所需信息,无需再根据索引中的指针 “回表” 去查找对应的完整数据行。这相当于只查看 “目录”(索引)就能得到想要的答案,避免了额外的数据读取操作,减少了磁盘 I/O 次数以及数据传输量,尤其在查询结果集较大或者表数据量庞大的情况下,能显著提升查询效率。

  • 提高查询速度:由于不需要回表操作,查询可以更快速地执行完成,缩短了查询的响应时间。例如,在一个包含用户信息(如用户名、年龄、地址等多个字段)的表中,如果经常只查询用户名和年龄这两个字段,为这两个字段建立覆盖索引后,当执行相应的查询语句时,数据库直接从索引中获取数据,无需再去查找完整的用户记录,查询速度会明显加快,提升了系统的整体性能。

 

\7. 【推荐】利用延迟关联或者子查询优化超多分页场景。

说明:MySQL 并不是跳过 offset 行,而是取 offset+N 行,然后返回放弃前 offset 行,返回 N 行,那当offset 特别大的时候,效率就非常的低下,要么控制返回的总页数,要么对超过特定阈值的页数进行 SQL改写。

正例:先快速定位需要获取的 id 段,然后再关联:

SELECT t1.* FROM 表 1 as t1, (select id from 表 1 where 条件 LIMIT 100000,20 ) as t2 where t1.id=t2.id

  • 提高分页查询效率:在传统的分页查询方式中,当偏移量(offset)特别大时,数据库需要先获取从起始位置(offset 行)开始的大量数据(offset + N 行),然后再舍弃前面的 offset 行,只返回后面的 N 行,这个过程会消耗大量的时间和系统资源,查询效率极低。而采用延迟关联或子查询的方式,先通过条件快速定位到需要获取的 ID 段(例如先查询出符合条件的部分 ID),再通过关联操作获取对应的数据行,避免了大量无用数据的读取和处理,能够显著提高超多分页场景下的查询效率,缩短查询响应时间。

  • 优化用户体验:在一些需要展示大量分页数据的应用场景(如电商平台的商品列表、论坛的帖子列表等)中,快速的分页查询响应能够让用户更流畅地浏览不同页面的内容,避免长时间等待页面加载,提升用户体验,增强应用的可用性和竞争力。

 

\8. 【推荐】SQL 性能优化的目标:至少要达到 range 级别,要求是 ref 级别,如果可以是 consts最好。

说明:

1) consts 单表中最多只有一个匹配行(主键或者唯一索引),在优化阶段即可读取到数据。

2) ref 指的是使用普通的索引(normal index)。

3) range 对索引进行范围检索。

反例:explain 表的结果,type=index,索引物理文件全扫描,速度非常慢,这个 index 级别比较 range还低,与全表扫描是小巫见大巫。

  • 不同级别性能优势递增:

    • consts 级别:表示在单表中最多只有一个匹配行(通常基于主键或者唯一索引),数据库在优化阶段就能直接读取到数据,查询速度极快,几乎不需要额外的查找操作,是性能最优的情况。例如,通过主键查询一条特定的用户记录(SELECT * FROM users WHERE user_id = 123,假设 user_id 是主键),就能达到 consts 级别,能瞬间获取到结果。

    • ref 级别:使用普通的索引(normal index)进行查询,数据库可以根据索引快速定位到多条符合条件的数据行,相比于全表扫描或者低效率的索引使用方式,查询效率有明显提升。例如,在用户表中根据用户名(已建立普通索引)查询多个同名用户的记录(SELECT * FROM users WHERE username = '张三'),能利用索引达到 ref 级别,快速找到相关用户信息。

    • range 级别:对索引进行范围检索,虽然相对前两者效率稍低一些,但也比全表扫描或者低效的索引物理文件全扫描(type = index)要好得多。比如,查询年龄在某个区间内的用户记录(SELECT * FROM users WHERE age BETWEEN 20 AND 30,假设 age 有索引),可以通过索引进行范围查找,缩小查询范围,提高查询速度。

  • 整体性能提升目标:明确这些性能优化目标级别,有助于开发人员在编写 SQL 查询语句和设计索引时,朝着更高效的方向努力,通过合理的索引构建和查询优化,尽可能提升查询性能,使数据库系统在处理各种业务查询时能够快速响应,满足用户的使用需求,提升系统的整体性能和效率。

 

\9. 【推荐】建组合索引的时候,区分度最高的在最左边

正例:如果 where a=? and b=?,a 列的几乎接近于唯一值,那么只需要单建 idx_a 索引即可。

说明:存在非等号和等号混合判断条件时,在建索引时,请把等号条件的列前置。如:where c>? and d=?

那么即使 c 的区分度更高,也必须把 d 放在索引的最前列,即建立组合索引 idx_d_c。

  • 提高索引筛选效率:将区分度最高的字段放在组合索引的最左边,能够在查询时首先基于这个字段快速缩小查找范围。因为区分度高意味着该字段不同值的数量占总记录数的比例大,能更精准地区分不同的数据行,数据库通过这个字段可以快速过滤掉大量不符合条件的数据,后续再结合组合索引中的其他字段进一步筛选,提高整个查询的效率。例如,在订单表中,如果 customer_id 字段的区分度很高,当执行查询语句 WHERE customer_id =? and order_date =? 时,把 customer_id 放在组合索引的最左边(如建立 idx_customer_id_order_date 索引),数据库就能先依据 customer_id 的值快速定位到一部分订单记录,然后再根据 order_date 进一步精确查找,加快查询速度。

  • 适应复杂查询条件优化:在存在非等号(如 ><BETWEEN 等范围条件)和等号混合判断条件时,把等号条件的列前置建立组合索引,是为了更好地利用索引特性。由于数据库在使用索引进行查找时,对于等号条件能够更有效地定位数据,先基于等号条件缩小范围,再处理范围条件,这样可以使索引发挥更大的作用,避免因范围条件在前导致索引无法充分利用的情况,提升复杂查询条件下的查询性能。例如,对于查询语句 WHERE c >? and d =?,建立 idx_d_c 这样的组合索引,能先通过 d 的值确定一个较小的数据集,再在这个基础上根据 c 的范围条件进行筛选,优化查询操作。

 

10.【推荐】防止因字段类型不同造成的隐式转换,导致索引失效。

  • 确保索引正常使用:数据库在执行查询时,如果涉及到字段类型不一致,可能会自动进行隐式转换来使查询条件能够匹配数据。然而,这种隐式转换往往会导致索引失效,使得数据库无法利用原本建立好的索引进行快速查找,只能进行全表扫描,严重影响查询性能。例如,在一个表中 age 字段定义为 INT 类型,而查询语句写成 WHERE age = '20'(这里传入了字符串类型的值),数据库可能会进行隐式转换,但这样就不能使用 age 字段上的索引了。通过保证字段类型一致,能避免这种情况发生,确保索引在查询中正常发挥作用,维持查询的高效性。

  • 获得准确查询结果:除了性能问题,隐式转换还可能引发数据匹配错误,导致查询结果不符合预期。保证字段类型相同,能让查询按照正确的逻辑进行数据匹配,得到准确的查询结果,符合业务需求,避免因数据类型问题带来的业务逻辑错误和数据不一致情况。

 

11.【参考】创建索引时避免有如下极端误解:

1) 索引宁滥勿缺。认为一个查询就需要建一个索引。

2) 吝啬索引的创建。认为索引会消耗空间、严重拖慢记录的更新以及行的新增速度。

3) 抵制惟一索引。认为惟一索引一律需要在应用层通过“先查后插”方式解决。

  • 避免 “索引宁滥勿缺” 误解:

    • 节省资源:如果认为一个查询就需要建一个索引,会导致数据库中索引数量过多。过多的索引不仅会占用大量的磁盘空间,还会在数据插入、更新和删除操作时,增加数据库维护索引结构的开销,使这些操作变得缓慢,影响系统的整体性能。例如,在一个频繁更新数据的表中创建了大量不必要的索引,每次数据更新时,数据库都要对众多索引进行相应的调整,会严重拖慢系统的响应速度,浪费系统资源。

    • 提升可维护性:合理控制索引数量,只针对确实有高频查询需求的字段创建索引,能使数据库的索引体系更加简洁、清晰,便于后续的管理、维护以及性能优化工作。开发人员和运维人员在查看和分析数据库结构时,能够更容易理解每个索引的作用和必要性,避免因索引过多造成的混乱和潜在的问题。

  • 避免 “吝啬索引的创建” 误解:

    • 优化查询性能:虽然索引会消耗一定的磁盘空间且在数据更新时需要额外维护,但合理创建索引对于提升查询性能的作用是不可忽视的。对于经常用于查询条件的字段,创建索引能够大大加快查询速度,减少用户等待时间,提升用户体验。例如,在一个电商系统中,经常根据商品名称、分类等字段进行商品查询,如果因为担心影响更新速度而不创建相应索引,那么商品查询操作可能会变得非常缓慢,影响整个系统的使用效率。

    • 平衡性能考量:正确的做法是权衡查询频率和数据变更频率,在对查询性能有较大提升需求且数据变更不会因索引带来严重性能问题的情况下,合理创建索引,实现查询性能优化和数据操作性能之间的平衡,保障数据库系统在不同业务场景下都能高效运行。

  • 避免 “抵制惟一索引” 误解:

    • 保证数据准确性:认为唯一索引一律需要在应用层通过 “先查后插” 方式解决是不合理的。在应用层进行校验虽然可以起到一定的控制作用,但很难完全避免并发等情况下的重复数据插入问题。而唯一索引能够从数据库底层保障具有唯一特性的数据不会重复,确保数据的完整性和准确性,避免脏数据的产生,这是应用层校验无法完全替代的。

    • 提升查询效率:唯一索引在查询操作中同样能发挥快速定位数据的优势,尤其是在根据唯一标识字段查找特定记录时,能够利用索引结构迅速找到目标记录,提高查询速度,优化数据库的整体性能,与通过应用层复杂的 “先查后插” 方式相比,效率更高且更可靠。

遵循这些索引规约及其所带来的好处,有助于在数据库设计和查询优化过程中,科学合理地运用索引,提升数据库性能,保障数据质量,满足业务系统对数据处理高效性和准确性的要求。

 

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

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

相关文章

GateWay使用手册

好的&#xff0c;下面是优化后的版本。为了提高可读性和规范性&#xff0c;我对内容进行了结构化、简化了部分代码&#xff0c;同时增加了注释说明&#xff0c;便于理解。 1. 引入依赖 在 pom.xml 中添加以下依赖&#xff1a; <dependencies><!-- Spring Cloud Gate…

SpringBoot+Flowable快速实现工流_动态选择审批人员

前言 OA系统中的工作流不仅是企业日常运营的重要组成部分&#xff0c;也是实现企业数字化转型、提高工作效率和执行力的重要工具。 在国内大部分的工作流系统使用Activiti框架实现。 其实flowable也可以轻松实现工作流业务。在线体验JeecgFlow flowable简介 Flowable是一个使用…

【ONE·基础算法 || 动态规划(三)】

总言 主要内容&#xff1a;编程题举例&#xff0c;熟悉理解动态规划类题型&#xff08;回文串问题、两个数组的 dp问题&#xff09;。                文章目录 总言7、回文串问题7.1、 回文子串&#xff08;medium&#xff09;7.1.1、题解 7.2、 最长回文子串&#…

Python 3 教程第33篇(MySQL - mysql-connector 驱动)

Python MySQL - mysql-connector 驱动 MySQL 是最流行的关系型数据库管理系统&#xff0c;如果你不熟悉 MySQL&#xff0c;可以阅读我们的 MySQL 教程。 本章节我们为大家介绍使用 mysql-connector 来连接使用 MySQL&#xff0c; mysql-connector 是 MySQL 官方提供的驱动器。…

LLM*:路径规划的大型语言模型增强增量启发式搜索

路径规划是机器人技术和自主导航中的一个基本科学问题&#xff0c;需要从起点到目的地推导出有效的路线&#xff0c;同时避开障碍物。A* 及其变体等传统算法能够确保路径有效性&#xff0c;但随着状态空间的增长&#xff0c;计算和内存效率会严重降低。相反&#xff0c;大型语言…

【Db First】.NET开源 ORM 框架 SqlSugar 系列

.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列【数据事务…

企业品牌曝光的新策略:短视频矩阵系统

企业品牌曝光的新策略&#xff1a;短视频矩阵系统 在当今数字化时代&#xff0c;短视频已经渗透到我们的日常生活之中&#xff0c;成为连接品牌与消费者的关键渠道。然而&#xff0c;随着平台于7月20日全面下线了短视频矩阵的官方接口&#xff0c;许多依赖于此接口的小公司和内…

006 MATLAB编程基础

01 M文件 MATLAB输入命令有两种方法&#xff1a; 一是在MATLAB主窗口逐行输入命令&#xff0c;每个命令之间用分号或逗号分隔&#xff0c;每行可包含多个命令。 二是将命令组织成一个命令语句文集&#xff0c;使用扩展名“.m”&#xff0c;称为M文件。它由一系列的命令和语句…

Java基于SpringBoot+Vue的IT技术交流和分享平台(附源码+lw+部署)

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

【计算机网络】实验3:集线器和交换器的区别及交换器的自学习算法

实验 3&#xff1a;集线器和交换器的区别及交换器的自学习算法 一、 实验目的 加深对集线器和交换器的区别的理解。 了解交换器的自学习算法。 二、 实验环境 • Cisco Packet Tracer 模拟器 三、 实验内容 1、熟悉集线器和交换器的区别 (1) 第一步&#xff1a;构建网络…

UICollectionView在xcode16编译闪退问题

使用xcode15运行工程&#xff0c;控制台会出现如下提示&#xff1a; Expected dequeued view to be returned to the collection view in preparation for display. When the collection views data source is asked to provide a view for a given index path, ensure that a …

Proteus8.17下载安装教程

Proteus是一款嵌入式系统仿真开发软件&#xff0c;实现了从原理图设计、单片机编程、系统仿真到PCB设计&#xff0c;真正实现了从概念到产品的完整设计&#xff0c;其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等&#xff0c;能够帮助用…

Vue教程|搭建vue项目|Vue-CLI2.x 模板脚手架

一、项目构建环境准备 在构建Vue项目之前&#xff0c;需要搭建Node环境以及Vue-CLI脚手架&#xff0c;由于本篇文章为上一篇文章的补充&#xff0c;也是为了给大家分享更为完整的搭建vue项目方式&#xff0c;所以环境准备部分采用Vue教程&#xff5c;搭建vue项目&#xff5c;V…

一款支持80+语言,包括:拉丁文、中文、阿拉伯文、梵文等开源OCR库

大家好&#xff0c;今天给大家分享一个基于PyTorch的OCR库EasyOCR&#xff0c;它允许开发者通过简单的API调用来读取图片中的文本&#xff0c;无需复杂的模型训练过程。 项目介绍 EasyOCR 是一个基于Python的开源项目&#xff0c;它提供了一个简单易用的光学字符识别&#xff…

cocotb pytest

打印python中的print &#xff0c; 应该使用 pytest -s

【C++】STL——map和set

目录 1、序列式容器和关联式容器前 2、set 2.1 set类的介绍 2.2 set的构造和迭代器 2.3 set的增删查 set 的插入 set的查找 set的删除 2.4 multiset和set的差异 3、map 3 .1 pair类型 3.2 map的构造 3.3 map的增删查 map的构造遍历 map的插入 map的删除 map的查…

java基础概念46-数据结构1

一、引入 List集合的三种实现类使用了不同的数据结构&#xff01; 二、数据结构的定义 三、常见的数据结构 3-1、栈 特点&#xff1a;先进后出&#xff0c;后进先出。 java内存容器&#xff1a; 3-2、队列 特点&#xff1a;先进先出、后进后出。 栈VS队列-小结 3-3、数组 3-…

Docker:在 ubuntu 系统上生成和加载 Docker 镜像

本文将介绍在 ubuntu系统上进行 Docker 镜像的生成和加载方法和代码。 文章目录 一、下载和安装 docker二、加载 docker 文件三、保存你的镜像四、将镜像上传到云端并通过连接下载和加载 Docker 镜像五、Docker 容器和本地的文件交互5.1 从容器复制文件到本地宿主机5.1.1 单个文…

《数据挖掘:概念、模型、方法与算法(第三版)》

嘿&#xff0c;数据挖掘的小伙伴们&#xff01;今天我要给你们介绍一本超级实用的书——《数据挖掘&#xff1a;概念、模型、方法与算法》第三版。这本书是数据挖掘领域的经典之作&#xff0c;由该领域的知名专家编写&#xff0c;系统性地介绍了在高维数据空间中分析和提取大量…

做异端中的异端 -- Emacs裸奔之路4: 你不需要IDE

确切地说&#xff0c;你不需要在IDE里面编写或者阅读代码。 IDE用于Render资源文件比较合适&#xff0c;但处理文本&#xff0c;并不划算。 这的文本文件&#xff0c;包括源代码&#xff0c;配置文件&#xff0c;文档等非二进制文件。 先说说IDE带的便利: 函数或者变量的自动…