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

MySQL之索引详解

华子目录

  • 索引概述
    • 优缺点
  • 索引的原理
  • 索引的设计原则
  • 索引结构
    • B-tree(多路平衡查找树)
    • B+tree
    • Hash
  • 为什么InnoDB存储引擎选择B+tree?
  • 索引分类
    • 聚集索引选取规则
  • 单列索引和多列索引
  • 前缀索引
  • 创建索引
    • 1.创建表时创建索引
    • 2.在已经存在的表上创建索引
    • 3.使用alter table语句创建索引
  • 使用计划查询SQL使用索引情况(==explain==)
  • 查看索引
  • 删除索引
  • 案例
  • SQL性能分析
    • 查看SQL执行频率
    • 慢查询日志
    • profile详情
    • explain执行计划
  • 索引的使用
    • 验证索引效率
    • 最左前缀法则
    • 范围查询
    • 索引列运算
    • 字符串不加引号
    • 模糊查询
    • or连接的条件
    • 数据分布的影响
    • SQL提示
    • 覆盖索引
    • 前缀索引
    • 单列索引和联合索引

索引概述

  • 索引(index) 是帮助MySQL高效获取数据数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式指向数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引
  • 在这里插入图片描述
  • 无索引时,需要一条一条查找每一条数据,有索引时就不需要逐一查询数据
  • 在数据库中用来加速对表的查询;通过使用快速路径访问方法快速定位数据,减少了磁盘的I/O;与表独立存放,但不能独立存在,必须属于某个表;由数据库自动维护,表被删除时,该表上的索引自动被删除;
  • 索引的作用类似于书的目录,几乎没有一本书没有目录,因此几乎没有一张表没有索引。

优缺点

  • 在这里插入图片描述

索引的原理

就是把无序的数据变成有序的查询

  1. 把创建的索引的列的内容进行排序
  2. 对排序结果生成倒排表
  3. 在倒排表内容上拼上数据地址链
  4. 在查询的时候,先拿到倒排表内容,再取出数据地址链,从而拿到具体数据

索引的设计原则

为了使索引的使用效率更高,在创建索引的时候必须考虑在哪些字段上创建索引和创建什么类型的索引。

  1. 选择惟一性索引
  2. 为经常需要排序、分组和联合操作的字段建立索引
  3. 为常作为查询条件的字段建立索引
  4. 限制索引的数目
  5. 尽量使用数据量少的索引
  6. 尽量使用前缀来索引
  7. 删除不再使用或者很少使用的索引

在这里插入图片描述

索引结构

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

索引结构描述
B+tree索引最常见的索引类型,大部分引擎都支持B+tree索引
Hash索引底层数据结构是用哈希表实现的,只有精确匹配索引列的查询才有效,通常使用较少
R-tree(空间索引)空间索引是MyISAM引擎的一个特殊索引类型,主要用于地理空间数据类型,通常使用较少
Full-text(全文索引)是一种通过建立倒排索引,快速匹配文档的方式。类似于Lucene,Solr,ES

在这里插入图片描述
在这里插入图片描述

B-tree(多路平衡查找树)

在这里插入图片描述

B+tree

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Hash

在这里插入图片描述
在这里插入图片描述

为什么InnoDB存储引擎选择B+tree?

在这里插入图片描述

索引分类

分类含义特点关键字
主键索引针对于表中主键创建的索引默认自动创建,只能存在一个primary
唯一索引避免同一个表中某数据列中的值重复可以有多个unique
常规索引快速定位特定数据可以有多个
全文索引全文索引查找的是文本中的关键字,而不是比较索引中的值可以有多个fulltext

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

分类含义特点
聚集索引将数据存储与索引放到了一块,索引结构的叶子节点保存了完整的行数据必须存在,且只有一个
非聚集索引(二级索引)将数据与索引分开存储,索引结构的叶子节点关联的是对应的主键可以存在多个

聚集索引选取规则

  • 如果存在主键主键索引就是聚集索引
  • 如果不存在主键,将使用第一个唯一(unique)索引作为聚集索引
  • 如果没有主键,也没有合适的唯一索引,则InnoDB会自动生成一个rowid作为隐藏的聚集索引

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 第一个执行效率高:因为第一个查的是主键索引,只查一张表。第二个先查name字段的索引,再根据name字段的索引值进行回表查询,查两张表。

单列索引和多列索引

MySQL中的单列索引和多列索引都是用于提高数据库查询效率的工具,它们有一些不同之处。

  1. 单列索引

    • 单列索引是针对表中的单个列创建的索引。
    • 它可以加速针对该列的查找、排序和过滤操作。
    • 适用于单列条件查询,例如:SELECT * FROM table WHERE column = value;
    • 单列索引可以包括在多列查询中,但只有第一列索引将被用于加速查找。
    • 创建单列索引的语法示例:CREATE INDEX index_name ON table_name (column_name);
  2. 多列索引

    • 多列索引是针对表中多个列组合而成的索引。
    • 它可以加速涉及这些列组合的查询,例如联合查询或者多列条件查询。
    • 当查询涉及到多个列时,多列索引通常比单列索引更有效。
    • 多列索引的列顺序非常重要,因为只有查询中使用的列的左侧前缀才会被索引所利用。
    • 创建多列索引的语法示例:CREATE INDEX index_name ON table_name (column1, column2, ...);

前缀索引

在 MySQL 中,你可以创建前缀索引来提高查询效率。前缀索引是指只对列值的一部分进行索引,而不是整个列值。这在某些情况下可以减少索引的大小,并提高查询性能,尤其是对于较大的列类型(如 TEXT 或 VARCHAR)。

要在 MySQL 中创建前缀索引,你可以使用以下语法:

CREATE INDEX index_name ON table_name (column_name(prefix_length));

在这里,prefix_length 是你希望索引的列值的前缀长度。以下是一个示例:

CREATE TABLE my_table (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100)
);CREATE INDEX idx_name_prefix ON my_table (name(10));

在这个示例中,我们为 name 列创建了一个前缀长度为 10 的索引。这意味着索引将仅包含 name 列值的前 10 个字符。你可以根据你的需求调整 prefix_length 的值。

请注意,使用前缀索引时需要注意选择适当的前缀长度。如果前缀长度太短,可能会导致索引失效,而如果太长,可能会增加索引的大小并降低性能提升效果。因此,需要根据你的数据和查询模式来选择合适的前缀长度。

创建索引

  • 创建索引是指在某个表的一列或多列上建立一个索引,以便提高对表的访问速度。
  • 创建索引三种方式,这三种方式分别是创建表时创建索引在已经存在的表上创建索引使用alter table语句来创建索引。

1.创建表时创建索引

创建表的时候可以直接创建索引,这种方式最简单、方便。其基本形式如下:

mysql> create table 表名(-> 列名 数据类型 约束,-> 列名 数据类型 约束,--------------------> 列名 数据类型 约束,-> [unique/fulltext] index 索引名(列名 [asc/desc])-> );
mysql> create table mytable(-> id int auto_increment primary key,-> name varchar(20),-> age int(3),-> phone int unique,-> unique index index_mytable_phone(phone),#创建唯一索引-> index index_mytable_name(name(3)),#创建前缀索引-> index index_mytable_age(age)#创建常规索引-> );
Query OK, 0 rows affected, 2 warnings (0.07 sec)mysql> show index from mytable;
+---------+------------+---------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table   | Non_unique | Key_name            | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+---------+------------+---------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| mytable |          0 | PRIMARY             |            1 | id          | A         |           0 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       |
| mytable |          0 | phone               |            1 | phone       | A         |           0 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
| mytable |          0 | index_mytable_phone |            1 | phone       | A         |           0 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
| mytable |          1 | index_mytable_name  |            1 | name        | A         |           0 |        3 |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
| mytable |          1 | index_mytable_age   |            1 | age         | A         |           0 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
+---------+------------+---------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
mysql> create table mytable(-> id int auto_increment primary key,-> name varchar(20),-> age int(3),-> phone int unique,-> index index_mytable_name(name(3)),-> index index_mytable_age(age)-> );
Query OK, 0 rows affected, 1 warning (0.05 sec)mysql> show index from mytable;
+---------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table   | Non_unique | Key_name           | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+---------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| mytable |          0 | PRIMARY            |            1 | id          | A         |           0 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       |
| mytable |          0 | phone              |            1 | phone       | A         |           0 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
| mytable |          1 | index_mytable_name |            1 | name        | A         |           0 |        3 |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
| mytable |          1 | index_mytable_age  |            1 | age         | A         |           0 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
+---------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+

注:MySQL8会为主键和唯一和外键自动创建索引

2.在已经存在的表上创建索引

前提是:该表上无索引,需要手动添加索引

mysql> create [unique/fulltext] index 索引名 on 表名(列名);  #创建单列索引
mysql> create [unique/fulltext] index 索引名 on 表名(列名1,列名2...);  #创建多列索引 
mysql> create table mytable(-> id int auto_increment primary key,-> name varchar(20)-> );mysql> create unique index index_mytable_name on mytable(name(3));mysql> show index from mytable;
+---------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table   | Non_unique | Key_name           | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+---------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| mytable |          0 | PRIMARY            |            1 | id          | A         |           0 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       |
| mytable |          0 | index_mytable_name |            1 | name        | A         |           0 |        3 |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
+---------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+

3.使用alter table语句创建索引

mysql> alter table 表名 add [unique/fulltext] index 索引名(列名);
mysql> create table mytable(-> id int auto_increment primary key,-> name varchar(20)-> );#通过添加索引的方式添加约束
mysql> alter table mytable add unique index index_mytable_name(name);   mysql> show index from mytable;
+---------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table   | Non_unique | Key_name           | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+---------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| mytable |          0 | PRIMARY            |            1 | id          | A         |           0 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       |
| mytable |          0 | index_mytable_name |            1 | name        | A         |           0 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
+---------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+

使用计划查询SQL使用索引情况(explain

mysql> desc stu;
+---------+-------------+------+-----+---------+----------------+
| Field   | Type        | Null | Key | Default | Extra          |
+---------+-------------+------+-----+---------+----------------+
| id      | int         | NO   | PRI | NULL    | auto_increment |
| name    | varchar(20) | NO   |     | NULL    |                |
| age     | int         | NO   |     | NULL    |                |
| classid | int         | NO   | MUL | NULL    |                |
+---------+-------------+------+-----+---------+----------------+mysql> show index from stu;
+-------+------------+---------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table | Non_unique | Key_name            | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+-------+------------+---------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| stu   |          0 | PRIMARY             |            1 | id          | A         |           2 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       |
| stu   |          1 | stu_classid_foreign |            1 | classid     | A         |           2 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       |
+-------+------------+---------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+mysql> select * from stu;
+-----+--------+-----+---------+
| id  | name   | age | classid |
+-----+--------+-----+---------+
| 101 | 小天   |  18 |    1001 |
| 102 | 小明   |  20 |    1003 |
| 103 | 小红   |  13 |    1002 |
+-----+--------+-----+---------+mysql> explain select * from stu where id=101;
+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------+
| id | select_type | table | partitions | type  | possible_keys | key     | key_len | ref   | rows | filtered | Extra |
+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------+
|  1 | SIMPLE      | stu   | NULL       | const | PRIMARY       | PRIMARY | 4       | const |    1 |   100.00 | NULL  |
+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------+mysql> explain select * from stu where id=103;
+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------+
| id | select_type | table | partitions | type  | possible_keys | key     | key_len | ref   | rows | filtered | Extra |
+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------+
|  1 | SIMPLE      | stu   | NULL       | const | PRIMARY       | PRIMARY | 4       | const |    1 |   100.00 | NULL  |
+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------+
explain分析结果的含义:id: 每一行的编号select_type: 查询类型。这里是 SIMPLE,表示这是一个简单的查询。table:这是表的名字。partitions: 所使用的分区(如果有)type:连接操作的类型,ALLindex、range、 ref、eq_ref、const、system、NULL(从左到右,性能从差到好)possible_keys:可能可以利用的索引的名字Key:它显示了MySQL实际使用的索引的名字。如果它为空(或NULL),则MySQL不使用索引。key_len:索引中被使用部分的长度,以字节计。ref:它显示的是列的名字(或单词“const”),MySQL将根据这些列来选择行rows:MySQL所认为的它在找到正确的结果之前必须扫描的记录数。显然,这里最理想的数字就是1filtered: 表示按表的过滤条件过滤后的结果所占百分比。Extra:这里可能出现许多不同的选项,其中大多数将对查询产生负面影响

查看索引

mysql> show index from 表名;

删除索引

mysql> drop index 索引名 on 表名;

案例

按照下列需求,完成索引的创建

  1. name字段为姓名字段,该字段的值可能会重复,为该字段创建索引(创建一个常规索引
mysql> create index index_stu_name on stu(name);
  1. phone手机号字段的值是非空且唯一(primary),为该字段创建唯一索引(创建一个唯一索引
mysql> create unique index index_stu_phone on stu(phone);
  1. 为profession、age、status创建联合索引(多个常规索引
mysql> create index index_stu_profession_age_status on stu(profession,age,status);
  1. 为email建立合适的索引来提升查询效率(创建一个常规索引
mysql> create index index_stu_email on stu(email);

SQL性能分析

查看SQL执行频率

MySQL客户端连接成功后,通过show [session/global] status命令可以提供服务器状态信息,可以查看当前数据库insert,update,delete,select的访问频次

mysql> show [session/global] status like 'Com_______';

在这里插入图片描述

慢查询日志

  • 慢查询日志记录了所有执行时间超过指定时间(long_query_time,默认10秒) 的所有SQL语句的日志。
  • MySQL的慢查询日志默认没有开启,需要在MySQL的配置文件(/etc/my.cnf)中配置如下信息:
#开启MySQL慢日志查询开关
slow_query_log=1#设置慢日志时间为2秒,当SQL语句执行时间超过2秒,就会是为慢查询,并将该慢查询记录在慢查询日志中
long_query_time=2
  • 配置完成后,重新启动MySQL服务,进行测试,查看慢日志文件中记录的信息 /var/lib/mysql/localhost-slow.log

在这里插入图片描述

profile详情

  • show profiles 能够在做SQL优化时帮助我们了解时间都耗费到哪里去了。通过have_profiling变量,能够看到当前MySQL是否支持profile操作
mysql> select @@have_profiling;
  • 默认profiling是关闭的,可以通过set语句在session/global级别开启profiling:
mysql> set profiling=1;

执行一系列SQL操作后,然后通过如下指令查看SQL执行的耗时情况:

#查看每一条SQL的耗时基本情况
mysql> show profiles;#查看指定query_id的SQL语句各个阶段的耗时情况(在SQL指定过程中的各个阶段)
mysql> show profile for query_id;#查看指定query_id的SQL语句cpu的使用情况
mysql> show profile cpu for query query_id;

explain执行计划

  • explain或desc命令获取MySQL执行select语句的信息,包括select语句执行过程中如何连接和连接的顺序。
#直接在select语句之前加上关键字explain或desc
mysql> explain/desc select 字段列表 from 表名 where 条件;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

索引的使用

验证索引效率

在这里插入图片描述

最左前缀法则

在这里插入图片描述

范围查询

在这里插入图片描述

索引列运算

在这里插入图片描述

字符串不加引号

在这里插入图片描述

模糊查询

在这里插入图片描述

or连接的条件

在这里插入图片描述

数据分布的影响

在这里插入图片描述

SQL提示

在这里插入图片描述

覆盖索引

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

前缀索引

在这里插入图片描述
在这里插入图片描述

单列索引和联合索引

在这里插入图片描述
在这里插入图片描述

相关文章:

MySQL之索引详解

华子目录 索引概述优缺点 索引的原理索引的设计原则索引结构B-tree(多路平衡查找树)BtreeHash 为什么InnoDB存储引擎选择Btree?索引分类聚集索引选取规则 单列索引和多列索引前缀索引创建索引1.创建表时创建索引2.在已经存在的表上创建索引3.…...

Java面试题总结8:springboot

Spring Boot自动配置原理 importConfigurationSpring spi 自动配置类由各个starter提供,使用ConfigurationBean定义配置类,放到META-INF/spring.factories下 使用Spring spi扫描META-INF/Spring.factories下的配置类 如何理解Spring Boot中Starter …...

Android 4.4 以下,OkHttp访问Https报错,设置了sslSocketFactory仍无效的解决方法

背景 Android 4.4 及以下,使用 OkHttp 发送 Https 请求,报以下错误: javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl0x6b712c90: Failure in SSL library, usually a protocol erro…...

如何扫码查看企业介绍及填写招聘表?招聘二维码在线生成的方法

现在很多企业会通过生成二维码的方式来做企业介绍以及企业招聘,企业信息通过图片、文字、视频及其他内容展示,再创建合适的表单让扫码者按照制定的内容来填写对应的信息,从而完成扫码招聘的目的。 对于也想采用这种方式的小伙伴,…...

如何限制一个账号只在一处登陆

大家好,我是广漂程序员DevinRock! 1. 需求分析 前阵子,和问答群里一个前端朋友,随便唠了唠。期间他问了我一个问题,让我印象深刻。 他问的是,限制同一账号只能在一处设备上登录,是如何实现的…...

日常工作总结

日常工作总结 1000. JAVA基础1. 泛型1.1 泛型和Object的区别 1100. Spring1. 常用注解1.1 ControllerAdvice注解1.2 缓存Cacheable 2. 常用方法2.1 BeanUtils.copyProperties的用法 3. 常用功能组件3.1 过滤器Filter 2000. Linux应用 1000. JAVA基础 1. 泛型 1.1 泛型和Objec…...

Android Activity启动模式

文章目录 Android Activity启动模式概述四种启动模式Intent标记二者区别 Android Activity启动模式 概述 Activity 的管理方式是任务栈。栈是先进后出的结构。 四种启动模式 启动模式说明适用场景standard标准模式默认模式,每次启动Activity都会创建一个新的Act…...

【JavaScript】面试手撕防抖

引入 防抖可是前端面试时最频繁考察的知识点了,首先,我们先了解防抖的概念是什么。咳咳。👀 防抖: 首先它是常见的性能优化技术,主要用于处理频繁触发的浏览器事件,如窗口大小变化、滚动事件、输入框内容…...

【Kubernetes】K3S

目录 前言一、原理单体架构高可用架构 二、初始化1.配置yum源2.关掉防火墙3.关掉selinux4. 修改内核参数5.关掉swap交换分区 三、安装master节点1. 安装container2.启动master服务 四、安装node节点五、卸载六、总结 前言 各位小伙伴们,大家好,小涛又来…...

Docker实战——容器

目录 Docker 容器的基本概念与操作1.使用“docker create”创建容器。这里基于Nginx的镜像创建了一个容器,名字为mycontainer。2.使用“docker ps -a”命令查看所有的容器,这时的容器不一定是运行状态。3.使用 “docker start” 命令可以启动容器。4.使用…...

亚信安慧AntDB开启超融合数据库新纪元

(一) 前言 据统计,在信息化时代的今天,人们一天所接触到的信息量,是古人一辈子所能接收到的信息量的总和。当今社会中除了信息量“多”以外,人们对信息处理的“效率”和“速度”的要求也越来越高。譬如&…...

数学建模【多元线性回归模型】

一、多元线性回归模型简介 回归分析是数据分析中最基础也是最重要的分析工具,绝大多数的数据分析问题,都可以使用回归的思想来解决。回归分析的任务就是,通过研究自变量X和因变量Y的相关关系,尝试去解释Y的形成机制,进…...

【 10X summary report】怎么看?详细解读笔记

报告内容 在开始正式的分析之前,需要查看在对齐和计数过程中生成的任何总结统计信息。下图是由Cell Ranger工具创建的10X总结报告,在从10X scRNA-seq实验生成计数矩阵时会生成。 The left half of the report describes sequencing and mapping statist…...

K8S—Pod控制器

目录 1.什么是POD控制器 2.POD控制器有几种类型 3.POD与控制器之间的关系 4.示例 4.1 Deployment 4.2 SatefulSet ①为什么要有headless? ②为什么要有volumeClainTemplate? ③服务发现:就是应用服务之间相互定位的过程。 ④K8S里服…...

LabVIEW石油钻机提升系统数字孪生技术

LabVIEW石油钻机提升系统数字孪生技术 随着数字化、信息化、智能化的发展,石油钻采过程中的石油钻机数字化技术提升成为了提高钻井效率、降低生产成本的重要途径。基于中石油云平台提供的数据,采用数字孪生技术,对石油钻机提升系统进行数字化…...

C#双向链表实现:在当前节点后插入新数据的方法Insert()

目录 1.定义一个泛型节点类并自动属性 2.定义链表类&#xff0c;并实现Append、Print、MoveFirst、 Insert 3.Main方法 1.定义一个泛型节点类并自动属性 /// <summary> /// 定义泛型节点类 /// </summary> /// <typeparam name"T">泛型运算符&…...

10-Java装饰器模式 ( Decorator Pattern )

Java装饰器模式 摘要实现范例 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其结构 装饰器模式创建了一个装饰类&#xff0c;用来包装原有的类&#xff0c;并在保持类方法签名完整性的前提下&#xff0c;提供…...

Vue.js 实用技巧:深入理解 Vue.set 方法

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…...

单词规律00

题目链接 单词规律 题目描述 注意点 pattern只包含小写英文字母s只包含小写英文字母和 ’ ’s不包含任何前导或尾随对空格s中每个单词都被 单个空格 分隔 解答思路 本题与上一次同构字符串类似&#xff0c;思路可以参照同构字符串 代码 class Solution {public boolean …...

vue3 vite项目一运行就401(Unauthorized)

问题&#xff1a;项目一执行&#xff1a; pnpm run dev, 启动就出错&#xff0c; Failed to load resource: the server responded with a status of 401 (Unauthorized) 分析&#xff1a; 项目之前是正常运行的&#xff0c;没有问题&#xff0c;回溯刚刚改动&#xff0c;还原…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例&#xff1a;使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例&#xff1a;使用OpenAI GPT-3进…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...