MySQL-索引(INDEX)

文章目录

    • 1. 索引概述及优劣势
    • 2. 索引结构和不同引擎对索引的支持情况
      • 2.1 B+tree
      • 2.2 Hash索引
    • 3. 索引分类
    • 4. 索引语法
    • 5. 索引在什么情况下会失效?
      • 5.1 最左前缀法则
      • 5.2 范围查询
      • 5.3 索引列运算
      • 5.4 头部模糊查询
      • 5.5 OR连接条件
      • 5.6 字符串不加引号
      • 5.7 数据分布影响
    • 6. 索引优化
      • 6.1 SQL提示
      • 6.2 覆盖索引
      • 6.3 前缀索引
      • 6.4 单列索引/组合索引
    • 7. 索引设计原则
    • 8. 拓展
      • 8.1 为什么InnoDB存储引擎选择使用B+tree索引结构?
      • 8.2 聚集索引和非聚集索引

1. 索引概述及优劣势

  • 索引是一种特殊的数据库结构,由数据表中的一列或多列组合而成,可以用来快速查询数据表中有某一特定值的记录。通过索引,查询数据时不用读完记录的所有信息,而只是查询索引列。否则,数据库系统将读取每条记录的所有信息进行匹配。
  1. 索引的优势

    1. 提高数据检索的效率,降低数据库的IO成本。
    2. 通过索引列对数据进行排序,降低数据排序的成本,降低CPU的消耗。
  2. 索引的劣势

    1. 索引需要占磁盘空间,除了数据表占数据空间以外,每一个索引还要占一定的物理空间。如果有大量的索引,索引文件可能比数据文件更快达到最大文件尺寸。
    2. 当对表中的数据进行增加、删除和修改的时候,索引也要动态维护,这样就降低了数据的维护速度。

2. 索引结构和不同引擎对索引的支持情况

  • MySQL的索引是在存储引擎层实现的,不同的存储引擎有不同的索引结构,主要包含以下几种:

    索引结构描述
    B+Tree索引最常见的索引类型,大部分引擎都支持 B+ 树索引
    Hash索引底层数据结构是用哈希表实现的, 只有精确匹配索引列的查询才有效, 不支持范围查询
    R-tree(空间索引)空间索引是MyISAM引擎的一个特殊索引类型,主要用于地理空间数据类型,通常使用较少
    Full-text(全文索引)是一种通过建立倒排索引,快速匹配文档的方式。类似于 Lucene,Solr,ES
  • 上述是MySQL中所支持的所有的索引结构,接下来,我们再来看看不同的存储引擎对于索引结构的支持情况:

    索引InnoDBMyISAMMemory
    B+tree索引支持支持支持
    Hash索引不支持不支持支持
    R-tree索引不支持支持不支持
    Full-text5.6版本之后支持支持不支持

    注意:我们平常所说的索引,如果没有特别指明,都是指B+树结构组织的索引。

2.1 B+tree

  • B+Tree是B-Tree(多路平衡查找树)的变种,我们以一颗最大度数(max-degree)为4(4阶)的b+tree为例,来看一下其结构示意图:

  • 最终我们看到,B+Tree 与 B-Tree相比,主要有以下三点区别:

    1. 所有的数据都会出现在叶子节点。
    2. 叶子节点形成一个单向链表。
    3. 非叶子节点仅仅起到索引数据作用,具体的数据都是在叶子节点存放的。
  • MySQL索引数据结构对经典的B+Tree进行了优化。在原B+Tree的基础上,增加一个指向相邻叶子节点的链表指针,就形成了带有顺序指针的B+Tree,提高区间访问的性能,利于排序。

2.2 Hash索引

  • 哈希索引就是采用一定的hash算法,将键值换算成新的hash值,映射到对应的槽位上,然后存储在hash表中。

  • 特点:

    1. Hash索引只能用于对等比较(=,in),不支持范围查询(between,>,< ,…)。
    2. 无法利用索引完成排序操作。
    3. 查询效率高,通常(不存在hash冲突的情况)只需要一次检索就可以了,效率通常要高于B+tree索引。

3. 索引分类

  • 在MySQL数据库,将索引的具体类型主要分为以下几类:主键索引、唯一索引、常规索引、全文索引。

    分类含义特点关键字
    主键 索引针对于表中主键创建的索引默认自动创建, 只能有一个PRIMARY
    唯一 索引避免同一个表中某数据列中的值重复可以有多个UNIQUE
    常规 索引快速定位特定数据可以有多个INDEX
    全文 索引全文索引查找的是文本中的关键词,而不是比较索引中的值可以有多个FULLTEXT
    空间 索引对空间数据类型的字段建立的索引可以有多个SPATIAL
  1. 主键索引:顾名思义,主键索引就是专门为主键字段创建的索引,也属于索引的一种。

    • 主键索引是一种特殊的唯一索引,不允许值重复或者值为空
    • 创建主键索引通常使用 PRIMARY KEY 关键字。不能使用 CREATE INDEX 语句创建主键索引。
  2. 唯一索引:唯一索引与普通索引类似,不同的是创建唯一性索引的目的不是为了提高访问速度,而是为了避免数据出现重复

    • 唯一索引列的值必须唯一,允许有空值。如果是组合索引,则列值的组合必须唯一

    • 创建唯一索引通常使用 UNIQUE 关键字:

      CREATE UNIQUE INDEX index_id ON tb_student(id);
      
  3. 常规索引:普通索引是 MySQL 中最基本的索引类型,它没有任何限制,唯一任务就是加快系统对数据的访问速度。

    • 普通索引允许在定义索引的列中插入重复值和空值

    • 创建普通索引时,通常使用的关键字是 INDEX 或 KEY:

      CREATE INDEX index_id ON tb_student(id);
      
  4. 全文索引:全文索引主要用来查找文本中的关键字,只能在 CHAR、 VARCHAR 或 TEXT 类型的列上创建

    • 全文索引允许在索引列中插入重复值和空值。

    • 不过对于大容量的数据表,生成全文索引非常消耗时间和硬盘空间。

    • 创建全文索引使用 FULLTEXT 关键字 :

      CREATE FULLTEXT INDEX index_info ON tb_student(info);
      
  5. 空间索引:空间索引是对空间数据类型的字段建立的索引,使用 SPATIAL 关键字进行扩展。

    • 创建空间索引的列必须将其声明为 NOT NULL,空间索引只能在存储引擎为 MyISAM 的表中创建。

    • 空间索引主要用于地理空间数据类型 GEOMETRY。对于初学者来说,这类索引很少会用到。

      CREATE SPATIAL INDEX index_line ON tb_student(line);
      

4. 索引语法

  1. 创建索引:MySQL 提供了三种创建索引的方法:

    1. 可以使用专门用于创建索引的 CREATE INDEX 语句在一个已有的表上创建索引,但该语句不能创建主键。

      CREATE <索引名> ON <表名> (<列名> [<长度>] [ ASC | DESC])
      
    2. 索引也可以在创建表( CREATE TABLE)的同时创建。在 CREATE TABLE 语句中添加以下语句。语法格式:

      # 主键索引 CONSTRAINT PRIMARY KEY [索引类型] (<列名>,…)
      # 普通索引 KEY | INDEX [<索引名>] [<索引类型>] (<列名>,…)
      # 唯一索引 UNIQUE [ INDEX | KEY] [<索引名>] [<索引类型>] (<列名>,…)
      
    3. ALTER TABLE 语句也可以在一个已有的表上创建索引:

      # 主键索引 ADD PRIMARY KEY [<索引类型>] (<列名>,…)
      # 普通索引 ADD INDEX [<索引名>] [<索引类型>] (<列名>,…)
      # 唯一索引 ADD UNIQUE [ INDEX | KEY] [<索引名>] [<索引类型>] (<列名>,…)
      
  2. 查看索引

    SHOW INDEX FROM <表名> [ FROM <数据库名>]
    
  3. 删除索引:当不再需要索引时,可以使用 DROP INDEX 语句或 ALTER TABLE 语句来对索引进行删除

    # 使用 DROP INDEX语句
    DROP INDEX <索引名> ON <表名>
    
    # 使用 ALTER TABLE语句
    DROP PRIMARY KEY #表示删除表中的主键。一个表只有一个主键,主键也是一个索引。
    DROP INDEX index_name #表示删除名称为 index_name 的索引。
    DROP FOREIGN KEY fk_symbol #表示删除外键
    

5. 索引在什么情况下会失效?

5.1 最左前缀法则

  • 一个组合索引实质上为表的查询提供了多个索引,以来加快查询速度。比如,在一个表中创建了一个组合索引(c1, c2, c3),在实际查询中,系统用来实际加速的索引有三个:单个索引(c1)双列索引(c1, c2)多列索引(c1, c2, c3)

  • 如果索引了多列(联合索引),要遵守最左前缀法则。最左前缀法则指的是查询从索引的最左列开始,并且不跳过索引中的列。如果跳跃某一列,索引将会部分失效(后面的字段索引失效)。比如在组合索引(c1, c2, c3) 中,在查询时c1必须存在,否则组合索引直接失效。如果跳过c2,那么c3也直接失效。

    注意 : 最左前缀法则中指的最左边的列,是指在查询时,联合索引的最左边的字段(即是第一个字段)必须存在,与我们编写SQL时,条件编写的先后顺序无关。

5.2 范围查询

  • 联合索引中,出现范围查询(>,<),范围查询右侧的列索引失效。

  • 案例:如果有一个组合索引(profession,age,status),那么如下的查询语句就会造成status索引失效。

    select * from tb_user where profession = '软件工程' and age > 30 and status= '0';
    
  • 所以,在业务允许的情况下,尽可能的使用类似于 >= 或 <= 这类的范围查询,而避免使用 > 或 < 。

5.3 索引列运算

  • 不要在索引列上进行运算操作, 索引将失效。

  • 案例:phone字段是有索引的,而下述第二条查询语句对索引列进行计算会导致索引失效。

    select * from tb_user where phone = '17799990015';
    select * from tb_user where substring(phone,10,2) = '15';
    

5.4 头部模糊查询

  • 在查询语句中使用 LIKE 关键字进行查询时,如果匹配字符串的第一个字符为“%”,索引不会被使用,如果“%”不是在第一个位置,索引就会被使用。

  • 案例:在下述查询语句中,只有第一条语句索引会被使用。

    select * from tb_user where profession like '软件%';
    select * from tb_user where profession like '%工程';
    select * from tb_user where profession like '%工%';
    

5.5 OR连接条件

  • 查询语句只有 OR 关键字时, 如果 OR 前后的两个条件的列都是索引,那么查询中将使用索引。如果 OR 前后有一个条件的列不是索引,那么查询中将不使用索引

  • 案例:在下述查询语句中,id和age有索引,而phone没有索引。所以,第一条语句会使用索引,而第二条语句并不会使用索引。

    select * from tb_user where id = 10 or age = 23;
    select * from tb_user where id = 10 or phone = '17799990017';
    

5.6 字符串不加引号

  • 字符串类型字段使用时,不加引号,索引将失效。

  • 案例:在下述查询语句中,只有第一条索引会被使用。

    select * from tb_user where phone = '17799990015';
    select * from tb_user where phone = 17799990015;
    

5.7 数据分布影响

  • 就是因为MySQL在查询时,会评估使用索引的效率与走全表扫描的效率,如果走全表扫描更快,则放弃索引,走全表扫描。 因为索引是用来索引少量数据的,如果通过索引查询返回大批量的数据,则还不如走全表扫描来的快,此时索引就会失效。

6. 索引优化

6.1 SQL提示

  • SQL提示,是优化数据库的一个重要手段,简单来说,就是在SQL语句中加入一些人为的提示来达到优化操作的目的
  1. use index: 建议MySQL使用哪一个索引完成此次查询(仅仅是建议,mysql内部还会再次进行评估)。

    select * from tb_user use index(idx_user_pro) where profession = '软件工程';
    
  2. ignore index: 忽略指定的索引。

    select * from tb_user ignore index(idx_user_pro) where profession = '软件工程';
    
  3. force index: 强制使用索引。

    select * from tb_user force index(idx_user_pro) where profession = '软件工程';
    

6.2 覆盖索引

  • 尽量使用覆盖索引,减少select *。那么什么是覆盖索引呢?覆盖索引是指查询使用了索引,并且需要返回的列,在该索引中已经全部能够找到不需要进行回表查询

    Extra含义
    Using where; Using Index查找使用了索引,但是需要的数据都在索引列中能找到,所以不需 要回表查询数据
    Using index condition查找使用了索引,但是需要回表查询数据
  • 案例:有如下表结构,我们对id建立了主键索引(聚集索引),对name建立了普通索引(非聚索引)。

  1. 执行下述SQL语句, 根据id查询,直接走聚集索引查询。一次索引扫描,直接返回数据,性能高。

    select * from tb_user where id = 2;
    
  2. 执行下述SQL语句, 根据name查询,查询二级索引。但是由于查询返回的字段为idname,在name的二级索引中可以直接获取,不需要回表查询,性能高。

    selet id,name from tb_user where name = 'Arm';
    

    在这里插入图片描述

  3. 由于在name的二级索引中,不包含gender,所以,需要两次索引扫描,也就是需要回表查询,性能相对较差一点。

    selet id,name,gender from tb_user where name = 'Arm';
    

6.3 前缀索引

  • 当字段类型为字符串(varchartextlongtext等)时,有时候需要索引很长的字符串,这会让索引变得很大,查询时,浪费大量的磁盘IO, 影响查询效率。此时可以只将字符串的一部分前缀,建立索引,这样可以大大节约索引空间,从而提高索引效率。

  • 语法:

    create index idx_xxxx on table_name(column(n)) ;
    
  • 案例:为tb_user表的email字段,建立长度为5的前缀索引。

    create index idx_email_5 on tb_user(email(5));
    

6.4 单列索引/组合索引

  • 单列索引:即一个索引只包含单个列。联合索引:即一个索引包含了多个列。

  • 在业务场景中,如果存在多个查询条件,考虑针对于查询字段建立索引时,建议建立联合索引,而非单列索引

7. 索引设计原则

  1. 针对于数据量较大,且查询比较频繁的表建立索引。
  2. 针对于常作为查询条件(where)、排序(order by)、分组(group by)操作的字段建立索引。
  3. 尽量选择区分度高的列作为索引尽量建立唯一索引,区分度越高,使用索引的效率越高。
  4. 如果是字符串类型的字段,字段的长度较长,可以针对于字段的特点,建立前缀索引
  5. 尽量使用联合索引,减少单列索引,查询时,联合索引很多时候可以覆盖索引,节省存储空间,避免回表,提高查询效率。
  6. 要控制索引的数量,索引并不是多多益善,索引越多,维护索引结构的代价也就越大,会影响增删改的效率。
  7. 如果索引列不能存储NULL值,请在创建表时使用NOT NULL约束它。当优化器知道每列是否包含NULL值时,它可以更好地确定哪个索引最有效地用于查询。

8. 拓展

8.1 为什么InnoDB存储引擎选择使用B+tree索引结构?

  1. B+Tree是B-Tree(多路平衡查找树)的变种,在此之前先提及树的演变历程。

    1. 二叉树,每个节点支持两个分支的树结构,相比于单向链表,多了一个分支。

    2. 二叉查找树,在二叉树的基础上增加了一个规则,左子树的所有节点的值都小于它的根节点,右子树的所有子节点都大于它的根节点

    3. 二叉查找树会出现斜树问题,导致时间复杂度增加

    4. 因此又引入了一种平衡二叉树它具有二叉查找树的所有特点,同时增加了一个规则:”它的左右两个子树的高度差的绝对值不超过 1“。平衡二叉树会采用左旋、右旋的方式来实现平衡。

    5. B-Tree而 B 树是一种多路平衡查找树,它满足平衡二叉树的规则,但是它可以有多个子树,子树的数量取决于关键字的数量。

    6. B+Tree:B+树,其实是在 B 树的基础上做的增强,B 树的数据存储在每个节点上,而 B+树中的数据是存储在叶子节点,并且通
      过链表的方式把叶子节点中的数据进行连接


  2. B+Tree的优势

    1. 磁盘IO次数:B+Tree的所有的数据都会出现在叶子节点,非叶子节点仅起到索引作用。当数据量大时,树的层级更小,使得磁盘 IO 次数更少、更稳定。
    2. 范围查询:B+树的所有存储在叶子节点的数据使用了双向链表来关联,所以在查询的时候只需查两个节点进行遍历就行,而B 树需要获取所有节点,所以 B+树在范围查询上效率更高。
    3. 全盘扫描:因为叶子节点存储所有数据,所以 B+树的全局扫描能力更强一些,因为它只需要扫描叶子节点。但是 B 树需要遍历整个树。
    4. 主键自增:如果采用自增的整型数据作为主键,还能更好的避免增加数据的时候,带来叶子节点分裂导致的大量运算问题。

8.2 聚集索引和非聚集索引

  • 而在在InnoDB存储引擎中,根据索引的存储形式,又可以分为以下两种:

    分类含义特点
    聚集索引(Clustered Index)将数据存储与索引放到了一块,索引结构的叶子节点保存了行数据必须有,而且只有一个
    二级索引(Secondary Index)将数据与索引分开存储,索引结构的叶子节点关联的是对应的主键可以存在多个
  1. 聚集索引选取规则:

    1. 如果存在主键,主键索引就是聚集索引
    2. 如果不存在主键,将使用第一个唯一(UNIQUE)索引作为聚集索引。
    3. 如果表没有主键,或没有合适的唯一索引,则InnoDB会自动生成一个rowid作为隐藏的聚集索引
  2. 聚集索引和二级索引的具体结构如下:

  3. 回表查询这种先到二级索引中查找数据,找到主键值,然后再到聚集索引中根据主键值,获取数据的方式,就称之为回表查询

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【开源】SpringBoot框架开发考研专业课程管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 考研高校模块2.3 高校教师管理模块2.4 考研专业模块2.5 考研政策模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 考研高校表3.2.2 高校教师表3.2.3 考研专业表3.2.4 考研政策表 四、系统展示五、核…

跳表详解和实现|深挖Redis底层数据结构

文章目录 跳表前言项目代码仓库认识跳表跳表的实现思路跳表性能分析对比平衡树&#xff08;avl和红黑树&#xff09;和哈希表使用手册成员变量成员函数构造析构迭代器sizeclearemptyoperatorfindinserterase 跳表细节实现节点定义跳表结构定义构造、析构、拷贝构造和赋值重载si…

hummingbird,一个便于将模型部署到边缘设备的Python库!

前言 随着人工智能和机器学习的快速发展&#xff0c;将训练好的模型部署到生产环境中成为了一个重要的任务。而边缘计算设备&#xff0c;如智能手机、嵌入式系统和物联网设备&#xff0c;也需要能够运行机器学习模型以进行实时推理。Python Hummingbird 是一个强大的工具&…

Linux Terminator工具: 保存窗口布局 执行默认启动指令

How do I get Terminator to start up with my custom layout? - Ask Ubuntu

新春快乐(烟花、春联)【附源码】

新春快乐 一&#xff1a; C语言 -- 烟花二&#xff1a;Python -- 春联三&#xff1a;Python -- 烟花四&#xff1a;HTML -- 烟花 一&#xff1a; C语言 – 烟花 运行效果&#xff1a; #include <graphics.h> #include <math.h> #include <time.h> #include…

JSP原理简述

JSP动态网页技术&#xff0c;可以定义html&#xff0c;css&#xff0c;js等静态内容&#xff0c;还可以定义java代码等动态内容。 注意导入坐标时&#xff0c;JSP的scope标签是provided&#xff0c;和servlet一样&#xff0c;否则会报错。 JSP本质上就是一个Servlet&#xff0c…

C++11:移动构造函数【写法+调用时机】【C++返回vector为什么不报错】

文章目录 what is 移动构造函数&#xff1f;移动构造函数的实现的例子when 移动构造函数&#xff1f;在C98之前&#xff0c;没有移动构造函数&#xff0c;是怎么做的呢&#xff1f;后记 what is 移动构造函数&#xff1f; 构造函数string(string&& str)类似于复制构造…

单片机项目调试中的技巧和常见问题解决

单片机是嵌入式系统中的重要组成部分&#xff0c;在各种电子设备中发挥着重要的作用。在单片机项目开发过程中&#xff0c;调试是至关重要的一环&#xff0c;同时也会遇到一些常见问题。本文将介绍一些单片机项目调试的技巧以及常见问题的解决方法&#xff0c;希望能够对单片机…

leetcode——滑动窗口题目汇总

本章总结一下滑动窗口的解题思路&#xff1a; 在字符串中使用双指针 left 和 right 围成的一个左闭右开的区域作为一个窗口。不断将 right 向右滑动&#xff0c;直到窗口中的字符串符合条件。此时将 left 向右滑动&#xff0c;直到窗口中的字符串不符合条件&#xff0c;期间需…

H12-821_73

73.某台路由器Router LSA如图所示&#xff0c;下列说法中错误的是&#xff1f; A.本路由器的Router ID为10.0.12.1 B.本路由器为DR C.本路由器已建立邻接关系 D.本路由器支持外部路由引入 答案&#xff1a;B 注释&#xff1a; LSA中的链路信息Link ID&#xff0c;Data&#xf…

MFC实现遍历系统进程

今天我们来枚举系统中的进程和结束系统中进程。 认识几个API 1&#xff09;CreateToolhelp32Snapshot 用于创建系统快照 HANDLE WINAPI CreateToolhelp32Snapshot( __in DWORD dwFlags, //指定快照中包含的系统内容__in DWORD th32P…

C++初阶:适合新手的手撕vector(模拟实现vector)

上次讲了常用的接口&#xff1a;C初阶&#xff1a;容器&#xff08;Containers&#xff09;vector常用接口详解 今天就来进行模拟实现啦 文章目录 1.基本结构与文件规划2.空参构造函数&#xff08;constructor)4.基本函数&#xff08;size(),capacity(),resize(),reserve())4.增…

基于JavaWeb的网上订餐项目

点击以下链接获取源码&#xff1a; https://download.csdn.net/download/qq_64505944/88825723?spm1001.2014.3001.5503 Java项目-16 浏览商品&#xff0c;会员登录&#xff0c;添加购物车&#xff0c;进行配送等功能 文件代码功能介绍 1.Src下的java文件存放的我们后端的…

Python算法题集_两两交换链表中的节点

Python算法题集_两两交换链表中的节点 题24&#xff1a;两两交换链表中的节点1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【四节点法】2) 改进版一【列表操作】3) 改进版二【三指针法】4) 改进版三【递归大法】 4. 最优算法 本文为Python算法…

Python 小白的 Leetcode Daily Challenge 刷题计划 - 20240209(除夕)

368. Largest Divisible Subset 难度&#xff1a;Medium 动态规划 方案还原 Yesterdays Daily Challenge can be reduced to the problem of shortest path in an unweighted graph while todays daily challenge can be reduced to the problem of longest path in an unwe…

ubuntu20.04 安装mysql(8.x)

安装mysql命令 sudo apt-get install mysql-server安装完毕后&#xff0c;立即初始化密码 sudo mysql -u root # 初次进入终端无需密码ALTER USER rootlocalhost IDENTIFIED WITH caching_sha2_password BY yourpasswd; # 设置本地root密码设置mysql远程登录 设置远程登录账…

【java苍穹外卖项目实战一】苍穹外卖项目介绍

文章目录 1、项目介绍1、项目概述2、 产品原型3、技术选型 1、项目介绍 在开发苍穹外卖这个项目之前&#xff0c;我们需要全方位的来介绍一下当前我们学习的这个项目。接下来&#xff0c;我们将从项目简介、产品原型、技术选型三个方面来介绍苍穹外卖这个项目。 1、项目概述 …

4核8G服务器配置性能怎么样?12M带宽配置服务器能干什么?

腾讯云轻量4核8G12M轻量应用服务器支持多少人同时在线&#xff1f;通用型-4核8G-180G-2000G&#xff0c;2000GB月流量&#xff0c;系统盘为180GB SSD盘&#xff0c;12M公网带宽&#xff0c;下载速度峰值为1536KB/s&#xff0c;即1.5M/秒&#xff0c;假设网站内页平均大小为60KB…

STM32 定时器

目录 TIM 定时器定时中断 定时器外部时钟 PWM驱动LED呼吸灯&#xff08;OC&#xff09; PWM控制舵机 PWMA驱动直流电机 输入捕获模式测频率&#xff08;IC&#xff09; 输入捕获模式测占空比 编码器接口测速(编码器接口) TIM 通用定时器 高级定时器 定时器定时中断 Ti…

CentOS7集群配置免密登录

准备工作 提前开启三台虚拟机hadoop102、hadoop103,hadoop104,关于三台虚拟机的安装可以参考&#xff1a;https://mp.csdn.net/mp_blog/creation/editor/136010108 配置免密登录 一、分别修改三台机器的hosts,配置主机映射关系 vim /etc/hosts 文件中输入以下内容&#xf…