Mysql(七) --- 索引

文章目录

  • 前言
  • 1.简介
    • 1.1.索引是什么?
    • 1.2.为什么使用索引?
  • 2.索引应该使用什么数据结构?
    • 2.1.Hash
    • 2.2.二叉搜索树
    • 2.3.N叉树
    • 2.4.B+树
      • 2.4.1. 简介
      • 2.4.2. B+树的特点
      • 2.4.3. B+树和B树的对比
  • 3.Mysql中的页
    • 3.1.为什么要使用页
    • 3.2.页文件头和页文件尾
    • 3.3.页主体
    • 3.4.页目录
    • 3.5.数据页头
  • 4.B+树在MySQL索引中的应用
    • 4.1.计算三层树高的B+树可以存放多少条记录
  • 5.索引分类
    • 5.1.主键索引
    • 5.2.普通索引
    • 5.3.唯一索引
    • 5.4.全文索引
    • 5.5.聚集索引
    • 5.6.非聚集索引
    • 5.7.索引覆盖
  • 6.使用索引
    • 6.1.自动创建
    • 6.2.手动创建
      • 6.2.1.主键索引
      • 6.2.2.唯一索引
      • 6.2.3.普通索引
    • 6.3.创建复合索引
    • 6.4.查看索引
    • 6.5.删除索引
      • 6.5.1.主键索引
      • 6.5.2.其他索引
    • 6.6.创建索引的注意事项
  • 7. explain语句
    • 7.1.type:访问类型
    • 7.2.使用explain


前言

前面我们学习了,数据库的增删改查等操作,在数据库中,用的最多的业务就是查找,在现实生活中,我们会发现有很多的关键字会被经常查到,为了可以更加高效地进行查询,我们为此引出索引


1.简介

1.1.索引是什么?

MySQL的索引是一种数据结构,它可以帮助数据库高效地查询,更新数据表中的数据。索引通过一定的规则排列数据表中的记录,使得对表的查询可以通过索引的搜索来加快速度。
MySQL索引类似于书籍的目录,通过指向数据行的位置,可以快速定位和访问表中的数据,比如汉语字典的目录(索引)页,我们可以按照笔画偏旁部首拼音等排序的目录(索引)快速查询到需要的字。

  • 笔画索引
    在这里插入图片描述

  • 偏旁部首索引
    ·

  • 拼音索引

在这里插入图片描述

1.2.为什么使用索引?

显而易见,使用索引的目的只有一个,就是要提升数据检索的效率,在应用程序的运行过程中,查询操作的频率远远高于增删改的频率。


2.索引应该使用什么数据结构?

2.1.Hash

时间复杂度是 O(1),查询速度非常快,但是MySQL并没有选择Hash做为索引的默认数据结构,主要原因是hash不支持范围查找

2.2.二叉搜索树

二叉搜索树的中序遍历是一个有序数组,但有几个问题导致它不适合用作索引的数据结构

  1. 最坏情况下时间复杂度为O(N),退化成了单边树
  2. 节点个数过多无法保证树高
    AVL和红黑树,虽然是平衡或者近似平衡,但是毕竟是二叉结构
    在检索数据时,每次访问某个节点的子节点时都会发生一次磁盘IO,而在整个数据库系统中,IO是性能的瓶颈,减少IO次数可以有效的推升性能。
    在这里插入图片描述
    在这里插入图片描述

2.3.N叉树

为了解决树高的问题,可以使用N叉树:
在这里插入图片描述

通过观察,相同数据量的情况下,N叉树的树高可以得到有效的控制,也就意味这在相同数据量的情况下可以减少IO的次数,从而提升效率。但是MySQL认为N叉树做为索引的数据结构还不够好。

2.4.B+树

2.4.1. 简介

B+树是⼀种经常用于数据库和文件系统等场合的平衡查找树,MySQL索引采用的数据结构,以4阶B+树为例,如下图所示:
在这里插入图片描述

2.4.2. B+树的特点

  1. 能够保持数据稳定有序,插入与修改有效为稳定的时间复杂度
  2. 非叶子节点尽有索引作用,不存储数据,所以叶子节点保真实数据
  3. 所有叶子节点构成一个有序链表,可以按照key排序的次序依次遍历全部数据

2.4.3. B+树和B树的对比

  1. 叶子节点中的数据是连续的,且相互链接,便于区间查找和搜索
  2. 非叶子节点的值都包含在叶子节点中
  3. 对于B+树而言,在相同树高的情况下,查找任意元素的时间复杂度都一样,性能均衡

索引在整个数据检索的过程中是如何工作的,要从MySQL存储结构说起

3.Mysql中的页

3.1.为什么要使用页

.ibd 文件中最重要的结构体就是Page(页),页是内存与磁盘交互的最小单元,默认大小为16KB,每次内存与磁盘的交互至少读取一页,所以在磁盘中每个页内部的地址都是连续的,之所以这样做,是因为在使用数据的过程中,根据局部性原理,将来要使用的数据大概率与当前访问的数据在空间上是临近的,所以依次从磁盘中读取一页的数据放入内存中,当下次查询的数据还在这个页中就可以从内存中直接读取,从而减少磁盘IO提高性能。

局部性原理:
是指程序在执行时呈现出局部性规律,在一段时间内,整个程序的执行仅限于程序中的某一部分。相应地,执行所访问的存储的存储空间也局限于某个内存区域,局部性通常有两种形式:时间局部性和空间局部性
时间局部性(Temporal Locality):如果一个信息项正在被访问,那么在近期他很可能还会被再次访问
空间局部性(Spatial Locality):将来要用到的信息大概率与正在使用的信息在空间地址上是临近的

  • 每一页中即使没有数据也会使用16KB的存储空间,同时与索引的B+树种的节点对应。查看页的大小,可以通过系统变量innodb_page_size查看。
    在这里插入图片描述
  • 在MySQL中有很多种不同类型的页,最常用的就是用来存储数据和索引的索引页也叫做"数据页",但不论哪种类型的页都会包含页头(File Header)页尾(File Trailer),页的主体信息使用**数据"行"**进行填充,数据页的基本结果如下图所示:

在这里插入图片描述

3.2.页文件头和页文件尾

页文件头和页文件尾中包含的信息,如下图所示:
在这里插入图片描述
这里我们只关注,上一页页号和下一页页号,通过这两个属性可以把页与页之间链接起来,形成⼀个双向链表

3.3.页主体

页主体部分是保存真实数据的主要区域,每当创建一个新页,都会自动分配两个行,一个是页内最小行Infimun,另外一个是页内最大行Supremun,这两个行并不存储任何真实信息,而是作为数据行链表的头和尾,第一个数据行有一个记录下一行的地址偏移量的区域next_record 将页内所有数据行组成一个单向链表,此时新页的结构如下所示:
在这里插入图片描述

当向一个新页插入数据时,将Infimun连接第一个数据行,最后一个真实数据行连接Supremun,这样数据行就构建成了一个单向链表,更多的行数据插入后,会按照主键从小到大的顺序进行连接,如下图所示:
在这里插入图片描述

3.4.页目录

  • 当按主键或索引查找某条数据时,最直接简单的方法就是从头行Infimun开始,沿着链表顺序逐个比对查找,但一页有16kb,通常会存在数百行数据,每次都要遍历数百行,无法满足高效查询,为了提高效率,InnoDB采用二分查找来解决查询效率的问题。
  • 具体实现方式是,在每一个页中加入一个叫做页目录(Page Directory) 的结构,将页内包括头行、尾行在内的所有行进行分组,约定头行单独为一组,其他每个组最多8条数据,同时把每个组最后一行在页中的地址,按主键从小到大的顺序记录在页目录中,页目录中的每一个位置称为一个,每个槽都对应了一个分组,一旦分组中的数据行超过分组的上线8个时,就会分裂出一个新的分组。
  • 后续在查询某行时,就可以通过二分查找,先找到对应的槽,然后在槽内最多8个数据行中进行遍历即可,从而大幅度提高了查询效率,这时一恶搞页的核心结构就完成了。
  • 例如要查询主键为6的行,先比对槽中记录的主键值,定位到最后一个槽2,再从最后一个槽中的第一条记录遍历,第二条记录就是我们要查询的目标行。

在这里插入图片描述

3.5.数据页头

数据页头记录了当前页保存数据相关的信息,如下图所示:
在这里插入图片描述


4.B+树在MySQL索引中的应用

非叶子节点在保存索引数据,叶子结点保存真实数据
在这里插入图片描述
以查找id为5的记录,完整的检索过程如下:

  1. 首先判断B+树的根节点中的索引记录,此时 5<7,应该访问左孩子节点,找到索引2
  2. 在索引页2中判断id的大小,找到与5相等的记录,然后加载对应的数据页

以上的IO过程,加载索引页1 - - - > 加载索引页2 - - -> 加载数据页3

4.1.计算三层树高的B+树可以存放多少条记录

  • 假设一条用户数据大小为1kb,在忽略数据页中数据页自身属性空间占用的情况下,一页可以存16条数据
  • 索引页一条数据的大小为,主键用BIGINT类型占8byte,下一页地址6byte,一共是14byte,一个索引页可以保存 16*1024/14 = 1170 条索引记录
  • 如果只有三层树高的情况下,综合只保存索引的根节点和二级节点的索引页以及保存真实数据的数据页,那么一共可以保存1170117016 = 21,902,400 条记录,也就是说在两千多万条数据表中,可以通过三次IO就完成了数据的检索

5.索引分类

5.1.主键索引

  • 当在一个表上定义一个主键PRIMARY KEY时,自动创建索引,索引的值是主键列的值,InnoDB使用它作为聚集索引
  • 推荐为每个表定义一个主键,如果没有逻辑上唯一且非空的列集可以使用主键,则添加一个自排列。

5.2.普通索引

  • 最基本的索引类型,没有唯一性的原则
  • 可能为多列创建组合索引,称为复合索引。

5.3.唯一索引

  • 当在一个表上定义一个唯一键UNIQUE时,自动创建唯一索引
  • 与普通索引类似,但区别在于唯一索引的列不允许有重复值。

5.4.全文索引

  • 基于文本列(CHAR,WARCHAR或TEXT列)上创建,以加快对这些列中包含的数据查询和DML操作
  • 用于全文搜索,仅MylSAM和InnoDB引擎支持

5.5.聚集索引

  • 与主键索引是同义词
  • 如果没有为表定义PRIMARY KEY,InnoDB使用第一个UNIQUENOT NULL的列作为聚集索引。
  • 如果表中没有PRIMARY KEY或合适的UNIQUE索引,InnoDB会为新插入的行生成一个行号并用6字节的ROW_ID字段记录,ROW_ID单调递增,并使用ROW_ID做为索引

5.6.非聚集索引

  • 聚集索引以外的索引称为非聚集索引或二级索引
  • 二级索引中的每条记录都包含该行的主键列,以及二级索引指定的列
  • InnoDB使用这个主键值来搜索聚集索引中的行,这个过程称为回表查询

5.7.索引覆盖

当一个select语句使用了普通索引且查询列表中的列刚好是创建普通索引时的所有或部分列,这时就可以直接返回数据,而不用回表查询,这样的现象称为索引覆盖


6.使用索引

6.1.自动创建

当我们为一张表加主键约束(Primary Key),外键约束(Foreign Key),唯一约束(Unique)时,MySQL会为对应的列自动创建一个索引
如果表不指定任何约束时,MySQL会自动为每一列生成一个索引并用ROW_ID进行标识

6.2.手动创建

6.2.1.主键索引

方法一:
创建表时指定主键并查看表结构

create table t_pk1(
id bigint primary key auto_increment,
name varchar(50)
);
desc t_pk1;

在这里插入图片描述
查看索引内容

show index from t_pk1;

在这里插入图片描述
方法二:
创建表时单独指定主键列

create table t_pk2(
id bigint auto_increment,
name varchar(50),
primary key (id)
);

在这里插入图片描述
方法三:
修改表中的列为主键索引

create table t_pk3(
id bigint,
name varchar(50)
);
-- 修改表中的id列为主键索引
alter table t_pk3 add primary key (id);
alter table t_pk3 modify id bigint auto_increment;

在这里插入图片描述

6.2.2.唯一索引

唯一约束跟上面的操作流程都一样,下面只写部分代码,大家可以按照上面的流程进行操作。

# ⽅式一,创建表时创建唯⼀键
create table t_test_uk (
id bigint primary key auto_increment,
name varchar(20) unique
);
# ⽅式二,创建表时单独指定唯⼀列
create table t_test_uk1 (
id bigint primary key auto_increment,
name varchar(20),
unique (name)
);
# ⽅式三,修改表中的列为唯⼀索引
create table t_test_uk2 (
id bigint primary key auto_increment,
name varchar(20)
);
alter table t_test_uk2 add unique (name);

6.2.3.普通索引

方法一:创建表的时候创建普通索引

create table t_index1(id bigint primary key auto_increment,name varchar(50) unique,sno varchar(20),index(sno)
);

在这里插入图片描述
方法二:修改表中的列为普通索引

create table t_index2(id bigint primary key auto_increment,name varchar(20) unique,sno varchar(20)
);
alter table t_index2 add index(sno);

在这里插入图片描述
方法三:单独创建索引并指定索引名

create table t_index3(id bigint primary key auto_increment;name varchar(20),sno varchar(20)
);
-- 为name列建立索引,不指定索引名时失效,必须要指定名字
create index idx_t_index3_sno on t_index3(sno);

在这里插入图片描述
删除索引

alter table t_index3 drop index idx_t_index3_sno;

在这里插入图片描述

6.3.创建复合索引

创建语法与创建普通索引相同,只不过制定多个列,列与列之间用逗号隔开
方法一:创建表时指定索引列

create table t_index4(
id bigint primary key auto_increment,
name varchar(50),
sno varchar(20),
class_id bigint,
index(sno,name)
);

在这里插入图片描述

方法二:修改表中的列为复合索引

create table t_index5(id bigint primary key auto_increment,name varchar(50),sno varchar(50),class_id bigint
);
alter table t_index5 add index(sno,name);

方法三:单独创建索引并指定索引名

create table t_index6(id bigint primary key auto_increment,name varchar(20),sno varchar(20),class_id bigint
);
create index idx_t_index6_sno_name on t_index6 (sno,name);

在这里插入图片描述

6.4.查看索引

方法一:

show keys from 表名\G;

在这里插入图片描述

方法二:

show index from 表名;

在这里插入图片描述

方法三:

desc 表名;

在这里插入图片描述

6.5.删除索引

6.5.1.主键索引

如果直接删除自增列的主键索引,会发生下面的状态

alter table t_index6 drop primary key;

在这里插入图片描述
如果不出现错误呢?
先把id的自增性删除掉,再删除主键索引

alter table t_index6 modify id bigint;

在这里插入图片描述

alter table t_index6 drop primary key;

在这里插入图片描述

6.5.2.其他索引

alter table 表名 drop index 索引列名;

在这里插入图片描述

6.6.创建索引的注意事项

  • 索引应该创建在高频查询的列上
  • 索引需要占用额外的存储空间
  • 对表进行插入、更新和删除操作,同时也会修索引,可能会影响性能
  • 创建过多或者不合理的索引会导致性能下降,需要谨慎选择和规划索引

7. explain语句

explain 语句就是为了查看自己写的SQL语句是否使用了索引

7.1.type:访问类型

类型说明
ALL扫描全表
index扫描全部索引树
range扫描部分索引,索引范围扫描,对索引的扫描开始于某一点,返回匹配值域的行,常见于between,<,>等的查询
ref使用非唯一索引或非唯一索引前缀进行的查找,不是主键或不是唯一索引
eq_ref唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配,常见于主键或唯一索引扫描
const单表中最多有一个匹配行,查询起来非常迅速,例如根据主键或唯一索引查询。
system是const类型的特例,当查询的表只有一行的情况下,使用system
NULL不用访问表或者索引,直接就能得到结果
从上面到下面,其中性能由低到高

7.2.使用explain

首先先在student表中添加一个复合主键,然后在再查一下索引结构

create index idx_student_sn_name on student(sn,name);

在这里插入图片描述

show index from student;

在这里插入图片描述

  1. 不加条件,查询所有
explain select * from student;

在这里插入图片描述

  1. 使用主键
explain select * from student where student_id = 1;

在这里插入图片描述

  1. 子查询中使用索引
explain select * from student where student_id =(select studnet_id from student where student_id = 1);

在这里插入图片描述

  1. 使用普通索引
explain select * from student where sn = '09982';

在这里插入图片描述

  1. 使用复合索引
explain select * from student where sn = '09982' and name = '黑旋风李逵';

在这里插入图片描述
现在我们删除sn这个唯一索引

alter table student drop index sn;

在这里插入图片描述

explain select sn,name from student where sn ='09982' and name = '黑旋风李逵';

在这里插入图片描述
可能在写代码的时候会写这样的

explain select sn from student where name ='黑旋风李逵';

Extra:执行情况的说明和描述,包含不适合在其他列中显示但非常重要的额外消息。
Using index 和 Using where:

  1. Using index:表示使用索引,如果只有 Using index,说明没有查询到数据表,只用索引表就完成了这个查询,这个叫做覆盖索引
  2. Using where:表示条件查询,如果不读取表的所有数据,或不是仅仅通过索引就可以获取皆可以获取所有需要的数据,则会出现 Using index
    在这里插入图片描述

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

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

相关文章

小新学习Docker之Docker--harbor私有仓库部署与管理

目录 一、Harbor简介 1.1、Harbor概述 1.2、Harbor的特性 1.3、Harbor的构成 二、Harbor构建Docker私有仓库 2.1、部署Harbor服务 2.2、启动 Harbor 2.3、查看 Harbor 启动镜像&#xff0c;检查harbor是否安装成功 2.4、创建一个新项目 2.5、非本地主机进行下载镜像 …

STM32学习--4-1 OLED显示屏

接线图 OLED.c #include "stm32f10x.h" #include "OLED_Font.h"/*引脚配置*/ #define OLED_W_SCL(x) GPIO_WriteBit(GPIOB, GPIO_Pin_8, (BitAction)(x)) #define OLED_W_SDA(x) GPIO_WriteBit(GPIOB, GPIO_Pin_9, (BitAction)(x))/*引脚初始化*/ void …

软件安全漏洞挖掘: 基础知识和概念

1. 软件漏洞原理和漏洞检测方法 文章目录 1. 软件漏洞原理和漏洞检测方法1. 漏洞披露2. 漏洞定义和分类1. 漏洞的定义2. 漏洞的分类3. 漏洞检测方法常见方法1. 程序切片2. 形式化方法1. 符号执行3. 污点分析污点分析步骤/流程*污点分析流程的详细介绍1. 识别source和sink点2. 污…

Pycharm通过ssh远程docker容器搭建开发环境

本地pycharm通过ssh方式远程连接服务器&#xff08;Ubuntu&#xff09;上的docker容器&#xff0c;搭建开发环境。实现功能&#xff1a;将环境依赖打包成docker镜像&#xff0c;并在远程服务器中启动容器&#xff08;启动时做好端口映射和文件夹挂载&#xff09;&#xff0c;通…

使用vscode导入库失败解决方法

导入库失败原因 在使用vscode写python代码时&#xff0c;有时会遇见导入库失败的情况&#xff0c;如下图&#xff1a;无法解析导入“xxxxx” 或者 运行时报错&#xff1a;ModuleNotFoundError: No module named xxxxx。 原因可能有&#xff1a; 根本没有下载库&#xff1b…

Luminar Neo v1.21.0.13934 图像编辑软件绿色便携版

skylum Luminar Neo 是一款由未来 AI 技术驱动的创意图像编辑器。并且支持微软Windows及苹果Mac OX系统&#xff0c;它使创作者能够将他们最大胆的想法变为现实并乐在其中。借助 Luminar Neo 领先的 AI 技术和灵活的工作流程&#xff0c;完成创意任务并获得专业品质的编辑结果。…

java基础(5)继承与多态

目录 ​编辑 1.前言 2.正文 2.1继承 2.1.1继承概念 2.1.2继承语法 2.1.3子类访问父类 2.1.4super关键字 2.2多态 2.2.1多态概念 2.2.2多态条件 2.2.3重写 2.2.4向上转型与向下转型 2.2.5为什么要使用多态 3.小结 1.前言 哈喽大家好啊&#xff0c;今天继续来为大…

C++ operator new和operator delete的深入讲解

个人主页&#xff1a;Jason_from_China-CSDN博客 所属栏目&#xff1a;C系统性学习_Jason_from_China的博客-CSDN博客 所属栏目&#xff1a;C知识点的补充_Jason_from_China的博客-CSDN博客 前言 关于operator new和operator delete我们需要明确一个概念&#xff0c;这两个都是…

15.5 JDBC数据库编程5——DAO

目录 15.1.1 引言 实体类Product.java 异常类DaoException.java Dao.java ProductDao.java ProductDaoImpl.java ProductDaoTest.java 15.1.1 引言 Java是面向对象编程语言&#xff0c;主要操作对象&#xff0c;而关系数据库的数据并不是对象&#xff0c;Java程序插入…

linux线程 | 线程的控制(下)

前言&#xff1a; 本节内容是线程的控制部分的第二个小节。 主要是列出我们的线程控制部分的几个细节性问题以及我们的线程分离。这些都是需要大量的代码去进行实验的。所以&#xff0c; 准备好接受新知识的友友们请耐心观看。 现在开始我们的学习吧。 ps:本节内容适合了解线程…

动态内存管理(C语言 VS C++)

目录 一.动态内存管理的前置知识 1.栈区 a.栈区的特点 b.注意事项 2.堆区 a.堆区的特点 b.注意事项 3.全局/静态区 a.作用域和生命周期 b.注意事项 4.常量区 二.C语言动态内存管理 1.malloc 函数 a.接口简介与使用实例 b.注意要点 2.calloc 函数&#xff1a; 3.…

Flink Web UI 是使用和调试保姆级教程(持续更新)

Flink Web UI 是调试和监控 Flink 应用程序的重要工具&#xff0c;通过它&#xff0c;你可以实时查看正在运行的 Flink 任务的详细信息&#xff0c;包括作业的状态、性能指标、各子任务的运行情况、故障恢复情况等。Flink Web UI 的这些功能为开发者和运维人员提供了调试和优化…

软考系统分析师知识点十三:软件需求工程

前言 今年报考了11月份的软考高级&#xff1a;系统分析师。 考试时间为&#xff1a;11月9日。 倒计时&#xff1a;24天。 目标&#xff1a;优先应试&#xff0c;其次学习&#xff0c;再次实践。 复习计划第一阶段&#xff1a;扫平基础知识点&#xff0c;仅抽取有用信息&am…

FPGA采集adc,IP核用法,AD驱动(上半部分)

未完结&#xff0c;明天补全 IP核&#xff1a;集成的一个现有的模块 串口写好后基本不会再修改串口模块内部的一些逻辑&#xff0c;将串口.v文件添加进来&#xff0c;之后通过他的上层的接口去对他进行使用&#xff0c;所以我们打包IP&#xff0c;之后就不用去添加源文件了&a…

仿 Mac 个人网站开发 |项目复盘

一、前言 1.1 灵感来源 早年有幸看到国外大佬做的一个 基于 Web 的 Windows XP 桌面娱乐系统, 那时刚好有搭建一个个人博客的想法, 所以就想是否可以基于 WEB 实现一个仿 Mac UI 的个人博客, 以应用的形式来展示博客各个功能! 1.2 相关链接(求个 Star) 前端开源代码后端开源…

Linux之实战命令32:chroot应用实例(六十六)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列【…

ali 231普通滑块82y版本

有需求可以联系博主 let v Died_in2021

【含开题报告+文档+PPT+源码】基于人脸识别的课堂考勤系统的设计与实现

开题报告 随着科技的不断发展&#xff0c;人脸识别技术已经逐渐渗透到各个领域&#xff0c;包括教育领域。传统的课堂考勤方式通常依赖于学生签到或教师手动记录&#xff0c;这种方式存在着许多不足之处&#xff0c;例如容易出现人为错误、耗费时间和资源等。为了解决这些问题…

诺贝尔经济学奖历史名单数据集(1969-2024年)

2024年诺贝尔经济学奖授予了达龙阿西莫格鲁&#xff08;Daron Acemoglu&#xff09;、西蒙约翰逊&#xff08;Simon Johnson&#xff09;和詹姆斯A罗宾逊&#xff08;James A. Robinson&#xff09;&#xff0c;以表彰他们在理解制度如何影响经济发展方面的贡献。&#xff08;“…

jmeter用csv data set config做参数化

在jmeter中&#xff0c;csv data set config的作用非常强大&#xff0c;用它来做批量测试和参数化非常好用。 csv data set config的常用配置项如下&#xff1a; Variable Names处&#xff0c;写上源文件中的参数名&#xff0c;用于后续接口发送请求时引用 Ignore first line…