当前位置: 首页 > news >正文

MySQL索引和事务

目录

索引的作用 与 概念

MySQL有哪几种索引类型

如何提高查找效率

聚簇索引与非聚簇索引

覆盖索引

索引的优点和缺点

索引的一些基本操作

索引优化

B树、B+树、Hash、红黑树的区别

B树与B+树的区别

MySQL为什么使用B+树作为索引

联合索引中的顺序

MySQL的最左前缀原则

查看表的索引信息

怎么判断要不要加索引

所有的字段都适合建索引吗

如何评估一个索引创建的是否合理? 索引在哪些情况下会失效? 如何避免索引失效?

如何判断数据库的索引有没有生效?

索引是用来干什么的

索引的使用的场景

事务的概念

事务原子性如何保证

MySQL 事务的 ACID 特性

 事务的使用

MySQL中事务的隔离级别

脏读、不可重复读、幻读


索引的作用 与 概念

索引就相当于书的目录,主要作用就是提高查找效率。

MySQL有哪几种索引类型

1、从存储结构上来划分:BTree索引(B-Tree或B+Tree索引),Hash索引,full-index全文索引。这里所描述的是索引存储时保存的形式。

2、从应用层次来分:普通索引,唯一索引,复合索引。

  • 普通索引:即一个索引只包含单个列,一个表可以有多个单列索引
  • 唯一索引:索引列的值必须唯一,但允许有空值
  • 复合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并
  • 聚簇索引(聚集索引):并不是一种单独的索引类型,而是一种数据存储方式。具体细节取决于不同 的实现,InnoDB的聚簇索引其实就是在同一个结构中保存了B-Tree索引(技术上来说是B+Tree)和 数据行。
  • 非聚簇索引: 不是聚簇索引,就是非聚簇索引。

如何提高查找效率

当从数据库中进行查找操作时,比如根据条件 id=3 查找:可以遍历表进行查询,但是这种方式效率比较低。 如何提高效率呢?

这就需要想办法尽量避免遍历,可以通过一些特殊的数据结构来表示一些记录的特征,通过这些特征来减少比较次数,加快比较的速率。

当查找效率提高时,也将会付出一些代价:

就相当于与给书加上目录会费一些纸,即加上索引就会消耗一定的存储空间,数据量越大,消耗的空间就越大 

书的目录确定了,后续每次对书的内容进行调整时,都可能会影响到目录的准确性,就需要重新调整目录,同理,数据库的索引也是一样的,当进行增删查改时,往往也需要同步的调整索引的结构 

聚簇索引与非聚簇索引

在 InnoDB 里,索引B+ Tree的叶子节点存储了整行数据的是主键索引,也被称之为聚簇索引,即将数据 存储与索引放到了一块,找到索引也就找到了数据。 而索引B+ Tree的叶子节点存储了主键的值的是非主键索引,也被称之为非聚簇索引、二级索引。

  1. 对于InnoDB来说,想要查找数据我们还需要根据主键再去聚集索引中进行查找,这个再根据聚集 索引查找数据的过程,我们称为回表。第一次索引一般是顺序IO,回表的操作属于随机IO。需要回表的次数越多,即随机IO次数越多,我们就越倾向于使用全表扫描 。
  2. 通常情况下,主键索引(聚簇索引)查询只会查一次,而非主键索引(非聚簇索引)需要回表查询多次。当然,如果是覆盖索引的话,查一次即可 。
  3. 注意:MyISAM无论主键索引还是二级索引都是非聚簇索引,而InnoDB的主键索引是聚簇索引,二级索引是非聚簇索引。我们自己建的索引基本都是非聚簇索引。

覆盖索引

覆盖索引是指一个索引包含了查询所需的所有列数据,因此在查询时可以直接使用索引返回结果,而不需要回到数据表中查找数据行,从而大幅提高查询性能。

举个例子,假设有一张订单表,包含了订单编号、订单金额、订单日期等列,如果我们需要查询某个日期范围内的所有订单金额,我们可以在订单日期列上创建一个索引,如果该索引还包含了订单金额列,那么查询时就可以直接使用这个索引返回查询结果,而不需要再回到订单表中查找对应的订单金额,这就是覆盖索引。

可以看出,覆盖索引可以大幅提高查询性能,尤其是在大数据量的情况下。但是,在创建覆盖索引时需要注意,索引需要包含查询所需的所有列数据,因此索引的大小可能会比较大,从而增加读取磁盘的成本,也需要权衡创建索引的成本和查询性能的提高。

索引的优点和缺点

索引带来的好处:提高了查找得速度
索引带来得坏处:占用了更多的空间,拖慢了增删查改的速度

从表面来上看,似乎索引的坏处 比 索引带来的好处要多。但!这不必意味着 弊大于利!!
因为在实际需求的场景中,查询操作往往是最高频率的操作。
相对于“增删改” 的使用频率则低的可怜。
因此,查询作为一个高频操作,索引对其来说是不可缺少的,

另外,有了索引之后对于查询的效率的提升使非常巨大的!!!
当MySQL里面的数据量级 达到千万级别的时候(一个表里就有几千万,甚至破亿的数据)再去遍历表,就会非常非常的低效!!!

在另一方面:MySQL在进行数据比较的时候,不是像我们编程那样,一个for循环(这样的想法是错误的)。
编程上的查询是在内存中的比较;MySQL 中的比较是在硬盘上比较。
也就是说:在MySQL中的每一次比较都会涉及到硬盘的 IO 操作。

索引的一些基本操作

1.查看索引:show index from 表名
有些约束是自动带索引的,比如:primary ,unique
2.给指定列创建索引create index 索引名字 on 表名(列名);
例如:create index class_index on student(class);-- 给class这一列加上索引
注意:创建索引是一个非常低效的事情,尤其是当前表里面已经有很多数据的时候
所以,当你针对线上的数据库的时候,如果这个表没有索引的时候,不要贸然去加上索引…
3.删除索引drop index 索引名字 on student 表名
例如:drop index class_index on student;
注意:删除索引和创建索引一样,都是效率比较低的操作,也容易把数据库搞挂
因此,在创建表的时候,就应该把索引规划好。

索引优化

确定需要创建的索引的列:

可以通过查询SQL语句的执行计划,找出哪些SQL语句的查询效率比较低,然后确定需要创建索引的列。

确定索引类型:

不同的索引类型在不同的场景下具有不同的优势,需要根据具体的业务需求和场景来选择合适的索引类型。

避免在索引列上使用函数或者表达式:

在索引列上使用函数或者表达式会导致索引失效,从而降低查询性能。

避免使用 OR 连接条件:

在查询语句中使用 OR 连接条件会导致索引失效,从而降低查询性能。

避免在表达式左侧使用运算符:

在查询语句中,将运算符放在表达式的左侧会导致索引失效,从而降低查询性能。

B树、B+树、Hash、红黑树的区别

BTree:

B树是一棵多路平衡查找树

  • B树的每个节点都存储索引和数据(key和data)
  • 每个节点中的关键字都按照从小到大的顺序排列
  • 所有叶子节点都位于同一层,或者说根节点到每个叶子节点的长度都相同

 B+Tree:

B+树也是一棵多路平衡查找树

  • B+树中非叶子节点不存储数据,只存储索引。对于非叶子节点中key都按照从小到大的顺序排列, 非叶子节点中的每一个key,都会出现在子节点中,是子节点中最大或最小元素。所有的非叶子节点起到了索引作用。
  • 只有叶子节点存储data,叶子节点包含了这棵树的所有数据。
  • 叶子节点依据关键字的大小从小到大顺序链接,形成一个有序链表。便于区间查找和遍历。
  • 所有叶子节点都位于同一层,或者说根节点到每个叶子节点的长度都相同。

Hash索引:
虽然可以快速定位,但是没有顺序,IO复杂度高;
适合等值查询,如=、in(),不支持范围查询 ;
因为不是按照索引值顺序存储的,就不能像B+Tree索引一样利用索引完成排序 ;
如果有大量重复键值得情况下,哈希索引的效率会很低,因为存在哈希碰撞问题 。
红黑树:
树的高度随着数据量增加而增加,IO代价高。

B树与B+树的区别

B+树的优势:

  • IO次数更少
  • 查询性能很稳定
  • 范围查询更简便

1.B树的每个节点都存储key和data,B+树只有叶子节点存储data,叶子节点包含了这棵树的所有数据,这样一个叶子节点可以存储更多的key,可以使树更矮,所以 IO操作的次数更少。

2.B+树中所有的叶子节点构成一个有序链表,可以按照关键子码排序的次序遍历全部记录,由于数据顺序排列并相连,所以编译区间查找和搜索。而B树则需要进行每一层的遍历,相邻的元素可能在内存中并不相邻。

3.在B树中,当要查找的值恰好在一个非叶子节点时,查找到该节点就会成功并结束查询,而B+树由于非叶子节点只是索引部分,这些节点中只含有其子树中最大或最小关键字,当非终端节点的关键字等于给定值时,查找并不终止,而是继续向下查找直到叶子节点。因此,在B+树中,无论是否查找成功,都是走了一条从根节点到叶子节点的路径。

MySQL为什么使用B+树作为索引

(1)B+树的磁盘读写代价更低:B+树的内部节点并没有指向关键字具体信息的指针,因此其内部节点相对B树更小,如果把所有同一内部节点的关键字存放在同一盘块中,那么盘块所能容纳的关键字数量也越多,一次性读入内存的需要查找的关键字也就越多,相对IO读写次数就降低了。

(2)B+树的查询效率更加稳定:由于非终结点并不是最终指向文件内容的结点,而只是叶子结点中关键字的索引。所以任何关键字的查找必须走一条从根结点到叶子结点的路。所有关键字查询的路径长度相同,导致每一个数据的查询效率相当。

(3)B+树更便于遍历:由于B+树的数据都存储在叶子结点中,分支结点均为索引,方便扫库,只需要扫一遍叶子结点即可,但是B树因为其分支结点同样存储着数据,我们要找到具体的数据,需要进行一次中序遍历按序来扫,所以B+树更加适合在区间查询的情况,所以通常B+树用于数据库索引。

B+树更适合基于范围的查询:B树在提高了IO性能的同时并没有解决元素遍历的我效率低下的问题,正是为了解决这个问题,B+树应用而生。B+树只需要去遍历叶子节点就可以实现整棵树的遍历。而且在数据库中基于范围的查询是非常频繁的,而B树不支持这样的操作或者说效率太低。

联合索引中的顺序

MySQL可以使用多个字段同时建立一个索引,叫做联合索引。在联合索引中,如果想要命中索引,需要 按照建立索引时的字段顺序挨个使用,否则无法命中索引。

具体原因为: MySQL使用索引时需要索引有序,假设现在建立了"name,age,school"的联合索引,那么索引的排序为: 先按照name排序,如果name相同,则按照age排序,如果age的值也相等,则按照school进行排序。

当进行查询时,此时索引仅仅按照name严格有序,因此必须首先使用name字段进行等值查询,之后对于匹配到的列而言,其按照age字段严格有序,此时可以使用age字段用做索引查找,以此类推。因此在 建立联合索引的时候应该注意索引列的顺序,一般情况下,将查询需求频繁或者字段选择性高的列放在前面。此外可以根据特例的查询或者表结构进行单独的调整。

MySQL的最左前缀原则

最左前缀原则就是最左优先,在创建多列索引时,要根据业务需求,where子句中使用最频繁的一列放在最左边。

  • mysql会一直向右匹配直到遇到范围查询(>、 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用 到,a,b,d的顺序可以任意调整。
  • =和in可以乱序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql的查询优化器会帮 你优化成索引可以识别的形式。

在设计索引时要考虑使用最左前缀原则,将最常用的列放在最左边。这样可以使索引更加高效,查询速度更快。

查看表的索引信息

SHOW INDEX FROM 表名;

怎么判断要不要加索引

  • 当唯一性是某种数据特征的时候加唯一索引。需要判断定义列的完整性,以此提高查询速度。
  • 在频繁的进行分组或者排序时(即建立group by / order by )的列上建立索引,如果待排序的列有多个,可以进行组合索引。

所有的字段都适合建索引吗

  1. 数据较少的表
  2. 频繁更新的字段
  3. 数据比较重复的字段,比如性别、真假值
  4. where条件中用不到的字段不需要建立索引
  5. 参与列计算的列

如何评估一个索引创建的是否合理? 索引在哪些情况下会失效? 如何避免索引失效?

(1)对列进行计算或者是使用函数,则该列的索引会失效

(2)不匹配数据类型,会造成索引失效

(3)where语句中使用了IS NULL或者IS NOT NULL,会造成索引失效

(4)使用了反向操作,该索引将不起作用

(5)使用了link操作,索引就将不起作用

(6)在WHERE中使用OR时,有一个列没有索引,那么其它列的索引将不起作用

如何判断数据库的索引有没有生效?

通过explain

索引是用来干什么的

给信息分配一个id,方便能够快速找寻到该数据

索引的使用的场景

通常情况下,应该为需要经常进行查询的列创建索引,特别是那些数据量较大的列。使用索引可以显著提高查询效率。但是,在创建索引的时候,需要注意索引会增加数据表的存储空间和数据修改的成本,因此不能为所有列都创建索引。

以下是创建索引的一些建议:

  • 主键应该是唯一的,且自动递增的,因此默认会创建主键索引。
  • 对经常用于搜索条件的列进行索引,如where和join语句中使用的列。
  • 列值不重复或者重复很少的列上创建索引,如性别、状态等列。
  • 对经常需要排序的列进行索引。

需要注意的是,索引并不是万能的,也并不是越多越好。在数据量比较小的情况下,无索引查询的效率可能比使用索引还要高;在数据修改和写入比较频繁的表中,创建过多的索引会影响数据的修改和写入性能,因此需要权衡索引的使用和维护成本,选择合适的索引策略。

事务的概念

MySQL 事务是指一组操作,是一个不可分割的工作单位,可以确保一组数据库操作要么全部执行,要么全部不执行。换句话说,事务是 MySQL 中保证数据一致性和完整性的机制。

在 MySQL 中,事务可以用来保证数据库中数据的一致性和完整性,例如在向数据库中插入或更新一组数据时,要么所有数据插入或更新成功,要么所有操作全部回滚,保持数据的原样。

事务原子性如何保证

在执行到第二个SQL之前,是无法预料这次执行会失败(假设执行到第二个会失败)
因此,当出现执行失败后,有数据库执行一些“还原”操作,来消除前面SQL带来的影响。这个还原性的操作,叫做“回滚”。
因而外面看起来:当执行失败时,一个都没有执行。

MySQL 事务的 ACID 特性

ACID 是事务处理中的关键概念,它指的是:

  • 原子性:指事务中的操作要么全部执行成功、要么全部失败回滚,不会出现部分执行的情况。
  • 一致性:指在事务开始和结束后,数据库的完整性约束没有被破坏,也就是说事务执行前后都需要满足一些预定义的约束条件。
  • 隔离性:指一个事务中的执行不受其他并发事务的影响,它们之间是相互隔离的。
  • 持久性:指在事务提交之后,对数据的更新就被永久写入数据库,即使数据库出现故障也能够恢复。

 事务的使用

  1. 开启事务:start transaction;
  2. 执行多条SQL
  3. 回滚或提交:rollback ,commit

说明:rollback即是全部失败,commit即是全部成功

MySQL中事务的隔离级别

隔离级别是指在并发情况下,不同事务之间对数据库操作数据的可见性和影响范围的规定。 MySQL 支持以下四种隔离级别:

  • 读未提交:一个事务所做的修改,即使没有提交,对其他事务也是可见的。在这种隔离级别下可能会出现脏读和不可重复读问题。
  • 读已提交:一个事务所做的修改,在提交后才会对其他事务可见,同样可能会出现不可重复读问题。
  • 可重复读:保证了在同一个事务中对同一数据的读取是一致的,不受其他事务的影响。但是,可能会出现幻读问题。
  • 序列化:最严格的隔离级别,它通过对所有事务进行串行化执行来保证事务的隔离性。这种隔离级别能够避免所有并发问题,但是会对数据库性能产生较大影响。

在选择隔离级别时,需要根据应用的实际情况和数据安全性要求来选择,即需要权衡数据安全性和数据库性能。通常情况下,可重复读已经能够满足大部分应用需求。

脏读、不可重复读、幻读

处理脏读:在写的过程中,别人就不能读了(加锁的状态)等修改完了之后,别人才能读(解除加锁) 

处理不可重复读:给读加锁,读的时候不能写,就解决了不可重复读的问题。 

 处理幻读:串行化完成事务,即:写——>读——>写——>读

一个事务在执行中,读到另一个执行中事务的更新 ( 或其他操作 ) 但是未 commit 的数据,这种现象叫做脏读
同一个事务内,同样的读取,在不同的时间段(依旧还在事务操作中! ) ,读取到了不同的值,这种现象叫做不可重复读
数据在可重复读情况被读取出来,导致多次查找时,会多查找出来新的记录,就如同产生了幻觉。这种现象,叫做幻读

相关文章:

MySQL索引和事务

目录 索引的作用 与 概念 MySQL有哪几种索引类型 如何提高查找效率 聚簇索引与非聚簇索引 覆盖索引 索引的优点和缺点 索引的一些基本操作 索引优化 B树、B树、Hash、红黑树的区别 B树与B树的区别 MySQL为什么使用B树作为索引 联合索引中的顺序 MySQL的最左前缀原…...

typeScript 之 基础

工具: PlayGround 源码: GitHub TypeScript 变量声明 typeScript中变量声明注意: 开头不能以数字开头变量名称可以包含数字和字母除了下划线_和美元$符号外,不能包含其他任意特殊字符 声明的结构: let 变量名: 类型…...

android app控制ros机器人五(百度地图)

半吊子改安卓,新增了标签页,此标签页需要显示百度地图 按照官方教程注册信息,得到访问应用AK,步骤也可以参照下面csdn Android地图SDK | 百度地图API SDK 【Android】实现百度地图显示_宾有为的博客-CSDN博客 本人使用的是aar开…...

【ts】【cocos creator】excel表格转JSON

需要将表格导出为text格式放到项目resources/text文件夹下 新建场景,挂载到Canvas上运行 表格文件格式: 保存格式选text tableToJson : import CryptoJS require(./FileSaver);const { ccclass, property } cc._decorator;ccclass export default c…...

每天一个知识点——L2R

面试的时候,虽然做过医疗文献搜索,也应用过L2R的相关模型,但涉及到其中的一些技术细节,都会成为我拿不下offer永远的痛。也尝试过去理解去背下一些知识点,终究没有力透纸背,随着时间又开始变得模糊&#xf…...

解决flutter showDialog下拉框,复选框等无法及时响应的问题

使用StatefulBuilder _showDialogr() {showDialog(context: context,builder: (BuildContext ctx) {return StatefulBuilder(builder: (BuildContext context, StateSetter setState) {return Scaffold(body: Column(children: <Widget>[Container(height: 400,padding: …...

[C++ 网络协议编程] UDP协议

目录 1. UDP和TCP的区别 2. UDP的工作原理 3. UDP存在数据边界 4. UDP的I/O函数 4.1 sendto函数 4.2 recvfrom函数 4. 已连接(connected)UDP套接字和未连接(unconnected)UDP套接字 5. UDP的通信流程 5.1 服务器端通信流程 5.2 客户端通信流程 1. UDP和TCP的区别 主要…...

reactNative跳转appstore链接报错:Redirection to URL with a scheme that is not HTTP(S)

在reactnative中webview跳转H5下载页面&#xff0c;包错Redirection to URL with a scheme that is not HTTP(S) 在webview中添加一下代码 const onShouldStartLoadWithRequest (event: any) > {const { url } event;console.log(url);if (url.startsWith(https://itune…...

html css实现爱心

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><style>/* 爱心 */.lo…...

react中使用shouldComponentUpdate生命周期函数调用setState引起的无限循环的错误

场景&#xff1a; 在 React 组件中&#xff0c;当在 componentWillUpdate 或 componentDidUpdate 生命周期方法中调用 setState 时&#xff0c;会触发无限循环&#xff0c;导致超过最大更新深度。 错误原因 在React组件中 &#xff0c;我们使用componentWillUpdate 或 componen…...

麦肯锡发布《2023科技趋势展望报告》,生成式AI、下一代软件开发成为趋势,软件测试如何贴合趋势?

近日&#xff0c;麦肯锡公司发布了《2023科技趋势展望报告》。报告列出了15个趋势&#xff0c;并把他们分为5大类&#xff0c;人工智能革命、构建数字未来、计算和连接的前沿、尖端工程技术和可持续发展。 类别一&#xff1a;人工智能革命 生成式AI 生成型人工智能标志着人工智…...

【爬虫】P1 对目标网站的背景调研(robot.txt,advanced_search,builtwith,whois)

对目标网站的背景调研 检查 robot.txt估算网站大小识别网站所用技术寻找网站的所有者 检查 robot.txt 目的&#xff1a; 大多数的网站都会包含 robot.txt 文件。该文件用于指出使用爬虫爬取网站时有哪些限制。而我们通过读 robot.txt 文件&#xff0c;亦可以最小化爬虫被封禁的…...

maven如何建立JavaWeb项目并连接数据库,验证登录

这里是建立建立web项目&#xff1a;Maven如何创建Java web项目&#xff08;纯干货版&#xff09;&#xff01;&#xff01;&#xff01;_明天更新的博客-CSDN博客 我们主要演示如何连接数据库验证登录。 1.在webapp目录下创建我们的登录页面&#xff1a;index.jsp 还需要再…...

CVPR 2023 | 用户可控的条件图像到视频生成方法(基于Diffusion)

注1:本文系“计算机视觉/三维重建论文速递”系列之一&#xff0c;致力于简洁清晰完整地介绍、解读计算机视觉&#xff0c;特别是三维重建领域最新的顶会/顶刊论文(包括但不限于 Nature/Science及其子刊; CVPR, ICCV, ECCV, NeurIPS, ICLR, ICML, TPAMI, IJCV 等)。 本次介绍的论…...

动态规划(基础)

一&#xff0c;背包问题 老规矩&#xff0c;上链接&#xff08;http://t.csdn.cn/hEwvu&#xff09; &#xff08;1&#xff09;01背包问题 给定一个承重量为C的背包&#xff0c;n个重量分别为w1​,w2​,...,wn​的物品&#xff0c;物品i放入背包能产生pi​(>0)的价值(i1,…...

【Pytorch:nn.Embedding】简介以及使用方法:用于生成固定数量的具有指定维度的嵌入向量embedding vector

文章目录 1、nn.Embedding2、使用场景 1、nn.Embedding 首先我们讲解一下关于嵌入向量embedding vector的概念 1&#xff09;在自然语言处理NLP领域&#xff0c;是将单词、短语或其他文本单位映射到一个固定长度的实数向量空间中。嵌入向量具有较低的维度&#xff0c;通常在几…...

动态库的命名规则

1、动态库的命名规则&#xff1a;libname.so.x.y.z 名字含义lib这是共享库的前缀name共享库名字x主版本号y次版本号z发布版本号 2、每个版本号的含义 版本号含义主版本号表示库的重大升级&#xff0c;不同主版本号的库之间是不兼容的。依赖旧的主版本号的程序需要改动相应的…...

【Linux】网络---->网络理论

网络理论 网络协议分层模型网络数据的封装于分用地址管理 网络协议分层模型 OSI五层模型&#xff1a;应用层&#xff0c;传输层&#xff0c;网络层&#xff0c;数据链路层&#xff0c;物理层 应用层&#xff1a;主要负责应用程序间的沟通&#xff0c;代表协议有HTML协议&#x…...

Android学习之路(4) UI控件之输入框

本节引言&#xff1a; 在本节中&#xff0c;我们来学习第二个很常用的控件EditText(输入框)&#xff1b; 和TextView非常类似&#xff0c;最大的区别是&#xff1a;EditText可以接受用户输入&#xff01; 1.设置默认提示文本 如下图&#xff0c;相信你对于这种用户登录的界面并…...

1.初识Web

文章目录 1. 什么是Web?2.初始Web前端2.1.Web标准 1. 什么是Web? web:全球广域网&#xff0c;也称万维网(www World Wide Web)&#xff0c;能够通过浏览器访问的网站。 2.初始Web前端 网页有哪些部分组成&#xff1f; 文字、图片、音频、视频、超链接… 我们看到的网页&am…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下&#xff1a; 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载&#xff0c;下载地址&#xff1a;https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...

Ubuntu系统多网卡多相机IP设置方法

目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机&#xff0c;交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息&#xff0c;系统版本&#xff1a;Ubuntu22.04.5 LTS&#xff1b;内核版本…...

Unity VR/MR开发-VR开发与传统3D开发的差异

视频讲解链接&#xff1a;【XR马斯维】VR/MR开发与传统3D开发的差异【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...

pgsql:还原数据库后出现重复序列导致“more than one owned sequence found“报错问题的解决

问题&#xff1a; pgsql数据库通过备份数据库文件进行还原时&#xff0c;如果表中有自增序列&#xff0c;还原后可能会出现重复的序列&#xff0c;此时若向表中插入新行时会出现“more than one owned sequence found”的报错提示。 点击菜单“其它”-》“序列”&#xff0c;…...