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

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【Qt学习笔记】Qt Creator环境下 信号与槽 详解(自定义信号槽、断连、lambda表达式等)

文章目录 1. 信号槽概念1.1 信号的本质1.2 槽的本质1.3 标准信号槽1.4 信号槽 实例 2. 自定义信号槽2.1 自定义槽函数2.2 自定义信号2.3 带参 信号槽 3. 信号槽的意义 与 作用4. 信号槽断连 &#xff08;了解&#xff09;5. lamda表达式的使用5.1 基本用法5.2 捕获局部变量5.3 …

七、Nacos源码系列:Nacos服务发现

目录 一、服务发现 二、getServices()&#xff1a;获取服务列表 2.1、获取服务列表 2.2、总结图 三、getInstances(serviceId)&#xff1a;获取服务实例列表 3.1、从缓存中获取服务信息 3.2、缓存为空&#xff0c;执行订阅服务 3.2.1、调度更新&#xff0c;往线程池中…

【VTKExamples::PolyData】第二十三期 InterpolateMeshOnGrid

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 本文分享VTK样例InterpolateMeshOnGrid,并解析接口vtkProbeFilter 、vtkWarpScalar & vtkDealuany2D等多个接口,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步!…

用友U8+OA doUpload.jsp 文件上传漏洞复现

0x01 产品简介 用友U8+ OA经过20多年的市场锤炼,不断贴近客户需求,以全新UAP为平台,应对中型及成长型企业客户群的发展,提供的是一整套企业级数智化升级解决方案,为成长型企业构建精细管理、产业链协同、社交化运营为一体的企业互联网经营管理平台,助力企业应势而变,赢…

navigator.mediaDevices.getUserMedia获取本地音频/麦克权限并提示用户

navigator.mediaDevices.getUserMedia获取本地音频/麦克权限并提示用户 效果获取权限NotFoundErrorNotAllowedError 代码 效果 获取权限 NotFoundError NotAllowedError 代码 // 调用 captureLocalMedia()// 方法 function captureLocalMedia() {console.warn(Requesting lo…

软件应用实例分享,电玩计时计费怎么算,佳易王PS5游戏计时器系统程序教程

软件应用实例分享&#xff0c;电玩计时计费怎么算&#xff0c;佳易王PS5游戏计时器系统程序教程 一、前言 以下软件教程以 佳易王电玩计时计费管理系统软件V17.9为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 点击开始计时后&#xff0c;图片…

数字图像处理(实践篇)四十三 OpenCV-Python 使用SURF算法检测图像上的特征点的实践

目录 一 SURF算法概述 1 积分图 2 SURF算法 3 SIFT与SURF 二 涉及的函数 三 实践 一 SURF算法概述

jmeter的简单使用

1、打开jmeter 打开Jmeter 安装包&#xff0c;进入\bin 中&#xff0c;找到“ApacheJMeter.jar”或"jmeter.bat", 双击打开即可 2、建立线程组 如下图所示&#xff0c;右击TestPlan&#xff0c;点击ADD->Threads(Users)->ThreadGroup 线程组页面分析&#xf…

中科星图——如何利用中科星图智脑引擎来下载0.5米分辨率的高清遥感影像

简介 如何利用中科星图智脑引擎来下载0.5米分辨率的高清遥感影像,这里我们一旦您有GEE的基础那么还是非常好的接入到这个平台当中的,所以这里我们依旧是使用的JavaScript语言来进行编程,地球计算器-地球编程 (geovisearth.com) 这里有一个好处是这里的函数我们可以直接悬浮…

LoveWall v2.0Pro社区型校园表白墙源码

校园表白墙&#xff0c;一个接近于社区类型的表白墙&#xff0c;LoveWall。 源码特色&#xff1b; 点赞&#xff0c; 发评论&#xff0c; 发弹幕&#xff0c; 多校区&#xff0c; 分享页&#xff0c; 涉及违禁物等名词进行检测&#xff01; 安装教程: 环境要求&#xff1b;…

应用案例 | Softing dataFEED OPC Suite助力挤出机械自动化系统OPC UA升级

某知名挤出机械整体方案供应商在其最新自动化系统中采用了Softing dataFEED OPC Suite作为标准的OPC UA通信方案&#xff0c;不仅可采集多个西门子S7-1200控制器数据&#xff0c;而且为终客户提供了可靠、高性能的挤出机械自动化解决方案。 一 背景 多年前&#xff0c;该挤出机…

Codeforces Round 923 (Div. 3)D. Find the Different Ones! 双指针

Problem - D - Codeforces 双指针O(2n)&#xff0c;其实本场B题我写的是O(26n)&#xff0c;结果这道题不敢想哈哈。 题意就是给你一串数字&#xff0c;然后问区间(l , r)内是否有不同的数字&#xff0c;输出任意一组下标即可&#xff0c;没有就输出 -1 -1 所以我们看l 在 l1~…

Python(21)正则表达式中的“元字符”

大家好&#xff01;我是码银&#x1f970; 欢迎关注&#x1f970;&#xff1a; CSDN&#xff1a;码银 公众号&#xff1a;码银学编程 获取资源&#xff1a;公众号回复“python资料” 在本篇文章中介绍的是正则表达式中一部分具有特殊意义的专用字符&#xff0c;也叫做“元…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Stepper组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之Stepper组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Stepper组件 鸿蒙&#xff08;HarmonyOS&#xff09;仅能包含子组件StepperIte…

服务器与电脑的区别?

目录 一、什么是服务器 二、什么是电脑 三、服务器和电脑的区别 一、什么是服务器 服务器是指一种专门提供计算和存储资源、运行特定软件服务的物理或虚拟计算机。服务器主要用于接受和处理来自客户端&#xff08;如个人电脑、手机等&#xff09;的请求&#xff0c;并向客户…

力扣精选算法100道—— 连续数组(前缀和专题)

连续数组&#xff08;前缀和专题&#xff09; 目录 &#x1f6a9;了解题意 &#x1f6a9;算法原理 ❗为什么hash设置成<0,-1>键值对 ❗与和为K的子数组比较hash的键值对 &#x1f6a9;代码实现 &#x1f6a9;了解题意 我们看到给定数组里面只有0和1&#xff0c;我们…

高斯伪谱C++封装库开源!

Windows x64/86 C无依赖运行高斯伪谱法求解最优控制问题&#xff0c;你只需要ElegantGP! Author: Y. F. Zhang His Github: https://github.com/ZYunfeii 写在前面 这个库在你下载它的那一时刻起不再依赖任何其他代码&#xff0c;直接可用来构建C的最优控制问题并进行求解。…

[C/C++] -- CMake使用

CMake&#xff08;Cross-platform Make&#xff09;是一个开源的跨平台构建工具&#xff0c;用于自动生成用于不同操作系统和编译器的构建脚本。它可以简化项目的构建过程&#xff0c;使得开发人员能够更方便地管理代码、依赖项和构建设置。 CMake 使用一个名为 CMakeLists.tx…

微服务入门篇:Nacos注册中心(Nacos安装,快速入门,多级存储,负载均衡,环境隔离,配置管理,热更新,集群搭建,nginx反向代理)

目录 1.Nacos安装1.官网下载2.解压到本地3.启动nacos 2.Nacos快速入门1.在父工程中导入nacos依赖2.给子项目添加客户端依赖3.修改对应服务的配置文件4.启动服务&#xff0c;查看nacos发现情况 3.Nacos服务多级存储模型4.NacosRule负载均衡5. 服务实例的权重设置6.环境隔离&…

双重OSPF + OSPF综合实验

一、实验要求 1.R4为ISP&#xff0c;所连接的所有物理接口为公有网段&#xff0c;任意指定IP即可。 2.R1-2-3 构建一个星型结构的MGRE结构&#xff0c;其中R1为中心点&#xff0c;假设R1的公有IP为固定地址。 3.R1-5-6 构建另一个全连网状的MGRE网络&#xff0c;其中R1/5均为中…