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

SQL ⑦-索引

在这里插入图片描述

索引

索引是一种特殊的数据结构,它帮助数据库系统高效地找到数据。

索引通过一定的规则排列数据表中的记录,使得对表的查询可以通过对索引的搜索来加快速度。

索引好比书籍的目录,能帮助你快速找到相应的章节。

B+树

B+树是一种经常用于数据库和文件系统等场合的平衡查找树,为MySQL索引采用的数据结构。
在这里插入图片描述

非叶子节点仅具有索引作用,不存储数据,所有叶子节点保存真实的数据。

所有叶子节点构成一个有序链表,可以按照 key 排序的次序依此遍历全部数据。

记录是保存在 InnoDB 中的,InnoDB 存储引擎将数据划分为若干个,以作为磁盘和内存之间交互的最小单位。

InnoDB 中页的大小默认为 16KB。也就是默认情况下,一次最少从磁盘中读取16KB的数据到内存中,一次最少把内存中 16KB 的内容刷新到磁盘上。

存储用户记录的页我们统一叫做数据页

B+树在 MySQL 索引中的应用

在这里插入图片描述

  • 表中有主键,则会自动为主键建立索引,称为主键索引。
    在这里插入图片描述
    在这里插入图片描述

  • 非叶子节点记录的是索引信息,称为索引页。索引页保存的是主键的值和子节点的引用。

  • 叶子节点记录的是真实的数据,称为数据页。数据页保存的是真实的数据。

  • 页于页之间通过页号建立关联关系。

索引分类

主键索引

当在一个表上定义一个主键 PRIMAY KEY 时,InnoDB 使用它作为聚集索引

所以推荐为每个表定义一个主键。如果没有逻辑上唯一且非空的列或列集可以使用主键,则推荐添加一个自增列。

普通索引

主键索引是在搜索条件为主键时才会发挥作用,但如果搜索条件不是主键,则需要使用普通索引。为那个单独的列添加索引,可以提高查询效率。

对于需要经常搜索的列,可以添加索引。

组合索引

组合索引是指两个或多个列组合在一起创建的索引。

组合索引可以提高查询效率,因为组合索引可以减少索引的数量,减少磁盘 IO,提高查询性能。

使用组合索引时,例如:index(name, phone),会优先对 name 进行排序,如果 name 相同时,然后再对 phone 进行排序。所以 phone 并非总是有序的。

唯一索引

当在一个表上定义一个唯一键 UNIQUE 时,自动创建唯一索引。

与普通索引类似,但区别在于唯一索引的列值必须唯一。

全文索引

全文索引是一种特殊的索引,它对文本字段进行索引,可以快速查找包含指定关键词的记录。

全文索引需要 MySQL 的插件支持,如 MyISAM、InnoDB 等。

聚集索引

如果没有表定义主键,InnoDB 使用第一个 UNIQUENOT NULL 的列作为聚集索引。

如果表中没有 PRIMARY KEY 或者 UNIQUE 索引,InnoDB 会创建一个隐藏的聚集索引。为 6 字节的 ROW_ID 字段记录,ROW_ID 单调递增,并使用 ROW_ID 作为索引。

非聚集索引

聚集索引之外的索引,称为非聚集索引或者二级索引。

二级索引中的每条记录都包含该行的主键列,以及二级索引指定的列。

索引操作

创建索引

CREATE INDEX index_name ON table_name (column1[, column2,...]);CREATE TABLE table_name (column1 datatype,column2 datatype,column3 datatype,INDEX (column3 [, column2])
);

删除索引

ALTER table_name DROP PRIMARY KEY; # 删除主键索引alter table table_name drop index index_name; # 删除其他索引

查看是否使用索引

EXPLAIN SELECT_STATEMENT;

使用后,会出现 typepossible_keyskey 字段。

possible_keys 字段表示可能用到的索引,key 字段表示实际用到的索引。

type 字段表示索引类型,有 ALLindexrangerefeq_refconstsystemNULL 等。

  • ALL:全表扫描,没有任何索引可以使用。
  • index:索引扫描,扫描全部索引树。
  • range:索引范围扫描,查询语句中使用了索引范围。
  • ref:索引的一种查找方式,索引匹配某个值,但是不一定是唯一的。
  • eq_ref:索引的一种查找方式,索引匹配某个值,而且唯一。
  • constsystem:单表中最多有一个匹配的行,查询起来非常迅速。
  • NULL:不用访问表或者索引,直接就能得到结果。
  • Extra 字段表示额外信息。
    • Using index 表示查询时使用了索引,表示没有查询主键索引表或者数据表,而是直接使用当前索引就能得到结果,也叫做索引覆盖
    • Using where 表示查询时使用了 WHERE 条件。

如何用好索引

索引的代价

创建索引可以提高查询效率,那我可以为每个字段都创建索引吗?

这当然不合适~~~

空间代价

创建索引后,就相当于创建了一颗 B+树。

每一颗 B+树 的节点都是一个数据页,每一个数据页都占用 16KB 空间。

创建大量索引,会占用大量的磁盘空间。

时间代价

空间代价还可以使用 “钞能力” 来解决,但是时间代价却是无法回避的。

B+树 的叶子节点之间是通过相互连接的引用来组织的,也就是链表,且是有序的,当我们新增或者删除一个节点时,势必要对其他节点进行调整,这势必会影响查询效率。(删除不会真的删除,只是标记为删除,等到合适的时候才会真的删除)

执行查询语句之前,MySQL 查询优化器会基于 cost 成本对一条查询语句进行优化,并生成一个执行计划。如果创建的索引太多,优化器会计算每个索引的搜索成本,导致在分析过程中耗时太多,最终影响查询语句的执行效率。

回表的代价

在使用二级索引时,我们可以找到一些信息,但如果二级索引的信息不全,只有二级索引的列的值和主键值。

那么我们就需要拿着主键值通过主键索引再去查询一次,得到完整的记录。这个过程称为回表查询
在这里插入图片描述
回表查询的还是不小的,容易出现随机 IO 的情况。

能不回表查询就不回表查询。

要回表查询就尽量减少回表查询的次数。

索引覆盖

索引覆盖:索引覆盖是指索引包含了查询语句的所有列,不需要回表查询

比如,我们查询 id,name,age 三个字段。

SELECT id, name, age FROM table_name WHERE name = 'zs';

如果我们给 name 和 age 创建了联合索引,那么就可以直接使用该二级索引,而不需要回表查询了。

索引下推

索引下推 (Index Condition Pushdown,ICP) 是数据库优化技术的一种,它允许数据库引擎在索引扫描阶段,而不是在表扫描阶段,应用部分查询条件。这样可以减少从磁盘读取的行数,从而提高查询效率。

在没有 ICP 的情况下,数据库引擎会首先根据索引找到满足条件的行,然后将这些行的数据从磁盘读取到内存中,再应用查询条件进行过滤。这个过程可能会读取大量的行,即使只有一部分行满足查询条件。

而 ICP 技术则优化了这一过程。它使得数据库引擎可以在索引扫描的过程中直接应用查询条件,对于不满足条件的行,直接跳过,不再读取这些行的详细数据到内存中。这样就大大减少了 I/O 操作,提高了查询性能。

ICP技术主要在 MySQL 数据库中得到广泛应用,在其他一些数据库管理系统中也有类似的优化技术。

详情请看:索引下推详细

索引失效

索引失效是指索引对查询的优化没有帮助,或者索引没有完全起作用。

违反最左前缀原则

最左前缀原则 (Leftmost Prefix Principle,LPP) 指的是索引字段的选择,索引字段的选择应该遵循从左到右的顺序。

例如:我们创建了一个联合索引:(name, phone),我们直接使用 phone 作为条件进行查询。

EXPLAIN SELECT * FROM table_name WHERE phone = '123456';

可以看到 possible_keyskey 字段都为 NULL,表示没有使用索引。

如果我们加上 name 字段作为搜索条件

EXPLAIN SELECT * FROM table_name WHERE phone = '123456' AND name = 'zs';

这时 possible_keyskey 字段都不为 NULL,表示使用了索引。且我们不需要关系是先写 name 还是先写 phone,因为查询优化器会自动优化查询计划。

使用反向查询

MySQL 在使用反向查询(!=、<>、NOT LIKE)的时候无法使用索引,会导致全表扫描,覆盖索引除外。

LIKE以通配符开头

当使用 name LIKE '%xxx' 或者 name LIKE '%xxx%' 这两种都会导致索引失效。

因为联合索引的 B+树 数据页内的记录首先按照 name 字段排序,这两种搜索方式不在意 name 字段的开头是什么,自然就无法使用到索引,只能通过全表扫描的方式进行查询。

对索引列做任何操作

如果不是单纯的使用索引列,而是使用索引列进行了某些操作,例如数值计算,使用函数,手动或自动类型转换等操作,都会导致索引失效。

使用函数
EXPLAIN SELECT * FROM table_name WHERE LEFT(name, 3) = 'abc';

MySQL8.0 新增了函数索引的功能,我们可以给函数作用之后的结果创建索引。

ALTER TABLE table_name ADD KEY INDEX idx_name_left (LEFT(name, 3));
使用表达式
EXPLAIN SELECT age FROM table_name WHERE age + 1 = 18;

上述sql语句不会走索引,但是改成 age = 18 - 1 后就可以了。

EXPLAIN SELECT age FROM table_name WHERE age = 18 - 1;
使用类型转换
例子1 {#example1}

假设 phonevarchar 类型。我们创建 phone 列的索引。

EXPLAIN SELECT * FROM table_name WHERE phone = 123456;

通过结果得知上述查询没有走索引。

例子2

我们再假设 phone 列的类型为 bigint。同样创建索引。

EXPLAIN SELECT * FROM table_name WHERE phone = '123456';

通过结果得知,上述查询走了索引。

通过上述两个例子得知,当索引字段的数据类型为字符串,使用数字类型进行查询不会走索引;当索引字段数据类型为数字类型时,使用字符串类型进行查询会走索引。
我们需要知道 MySQL 的数据类型转换规则是什么。简单地就是 MySQL 会自动将数字转化为字符串,还是自动将字符串转化为数字。

我们只需执行一个 SELECT '10' > 9 即可知道 MySQL 的转换规则。

  • 如果结果为 1,说明 MySQL 自动将数字 '10' 转化为字符串 10。所以 '10 > 9'1
  • 如果结果为 0,说明 MySQL 自动将字符串 9 转化为数字 '9'。所以 '10' > '9'0
    执行我们发现,结果为 1,说明 MySQL 自动会将字符串类型转换为数字类型。

这也就解释了为什么 例子1 中 phone 列的索引失效了。

OR 连接

使用 OR 连接的查询语句,如果 OR 之前的条件列是索引列,但是 OR 之后的条件列不是索引列,则不会使用索引。

索引创建原则

不为离散度低的列创建索引

举个例子,gender(性别)列只有0、1两个值,列的离散度非常低,假如我们为该列创建索引,我们会在二级索引中搜索到大量的重复数据,然后进行大量回表操作。

只为用于搜索、排序或分组的列创建索引

我们只为出现在WHERE子句中的列或者出现在ORDER BY和GROUP BY子句中的列创建索引即可。仅出现在查询列表中的列不需要创建索引。

用好联合索引

不要为联合索引的第一个索引列单独创建索引

建立联合索引的时候,一定要把最常用的列放在最左边

对过长的字段,建立前缀索引

如果一个字符串格式的列占用的空间比较大(就是说允许存储比较长的字符串数据),为该列创建索引,就意味着该列的数据会被完整地记录在每个数据页的每条记录中,会占用相当大的存储空间。

对此,我们可以为该列的前几个字符创建索引,也就是在二级索引的记录中只会保留字符串的前几个字符。比如我们可以为 phone 列创建索引,索引只保留手机号的前3位。

频繁更新的值,不要作为主键或索引

因为可能涉及到数据页分裂的情况,会影响性能。

随机无序的值,不建议作为索引,例如身份证、UUID

索引结构(如B+树)对有序数据有更好的维护和查询效率。

使用随机无序的数据会导致:

  • 页分裂问题:每次插入新数据时可能需要重新调整B+树结构,造成频繁的页分裂(Page Split)
  • 缓存不友好:随机值破坏了局部性原理(Locality),相邻数据在物理存储上不连续。
    们可以为 phone 列创建索引,索引只保留手机号的前3位。
频繁更新的值,不要作为主键或索引

因为可能涉及到数据页分裂的情况,会影响性能。

随机无序的值,不建议作为索引,例如身份证、UUID

索引结构(如B+树)对有序数据有更好的维护和查询效率。

使用随机无序的数据会导致:

  • 页分裂问题:每次插入新数据时可能需要重新调整B+树结构,造成频繁的页分裂(Page Split)
  • 缓存不友好:随机值破坏了局部性原理(Locality),相邻数据在物理存储上不连续。
  • 查询范围效率低:例如身份证号 110101199003071234 和 310104198502151122 这类无序数据,当进行范围查询时,即使使用索引,仍需扫描大量不连续的叶子节点。

相关文章:

SQL ⑦-索引

索引 索引是一种特殊的数据结构&#xff0c;它帮助数据库系统高效地找到数据。 索引通过一定的规则排列数据表中的记录&#xff0c;使得对表的查询可以通过对索引的搜索来加快速度。 索引好比书籍的目录&#xff0c;能帮助你快速找到相应的章节。 B树 B树是一种经常用于数…...

LinkedBlockingQueue使用场景有哪些

1、LinkedBlockingQueue 的特点 LinkedBlockingQueue 是 Java 中 java.util.concurrent 包下的一种阻塞队列&#xff0c;它有以下几个主要特点&#xff1a; 1.线程安全 LinkedBlockingQueue 是线程安全的&#xff0c;它内部使用了锁机制来确保多线程环境下的并发访问不会导致…...

关于难例损失函数小记

什么是难例损失函数&#xff08;Hard Example Loss Function&#xff09; 这玩意儿是深度学习训练中非常重要又很实用的一个概念&#xff0c;特别适用于处理 数据不平衡、模型收敛缓慢、或者**想让模型更“挑剔”**的场景。 &#x1f31f; 先从名字讲起&#xff1a; “难例”…...

小程序开发指南

小程序开发指南 目录 1. 小程序开发概述 1.1 什么是小程序1.2 小程序的优势1.3 小程序的发展历程 2. 开发准备工作 2.1 选择开发平台2.2 开发环境搭建2.3 开发模式选择 3. 小程序开发流程 3.1 项目规划3.2 界面设计3.3 代码开发3.4 基本开发示例3.5 数据存储3.6 网络请求3.7 …...

RCE漏洞学习

1&#xff0c;What is RCE&#xff1f; 在CTF&#xff08;Capture The Flag&#xff09;竞赛中&#xff0c;RCE漏洞指的是远程代码执行漏洞&#xff08;Remote Code Execution&#xff09;。这类漏洞允许攻击者通过某种方式在目标系统上执行任意代码&#xff0c;从而完全控制目…...

青少年编程考试 CCF GESP图形化编程 三级认证真题 2025年3月

图形化编程 三级 2025 年 03 月 一、单选题&#xff08;共 15 题&#xff0c;每题 2 分&#xff0c;共 30 分&#xff09; 1、2025 年春节有两件轰动全球的事件&#xff0c;一个是 DeepSeek 横空出世&#xff0c;另一个是贺岁 片《哪吒 2》票房惊人&#xff0c;入了全球票房榜…...

一、绪论(Introduction of Artificial Intelligence)

写在前面&#xff1a; 老师比较看重的点&#xff1a;对问题的概念本质的理解&#xff0c;不会考试一堆运算的东西&#xff0c;只需要将概念理解清楚就可以&#xff0c;最后一个题会出一个综合题&#xff0c;看潜力&#xff0c;前面的部分考的不是很深&#xff0c;不是很难&…...

多模态大语言模型arxiv论文略读(十五)

## Jailbreaking GPT-4V via Self-Adversarial Attacks with System Prompts ➡️ 论文标题&#xff1a;Jailbreaking GPT-4V via Self-Adversarial Attacks with System Prompts ➡️ 论文作者&#xff1a;Yuanwei Wu, Xiang Li, Yixin Liu, Pan Zhou, Lichao Sun ➡️ 研究机…...

漏洞报告:多短视频平台时间差举报滥用漏洞

漏洞标题&#xff1a;跨平台内容发布时序漏洞导致的恶意举报攻击向量 漏洞类型&#xff1a;逻辑缺陷/滥用机制 漏洞等级&#xff1a;中高风险 漏洞描述&#xff1a; 攻击者可利用多平台内容发布时间差&#xff0c;伪造原创证明对合法内容发起恶意举报。该漏洞源于平台间缺乏发…...

【LINUX】学习宝典

一.Linux系统常用单词翻译 1.new folder 新建文件夹 2.paste 粘贴 3.select all 全选 4.open in terminal 打开终端/命令行 5.keep aligned 保持对齐 6.organize deaktop by name按名称组织桌面 7.change background更改背景 8.cancel 取消 9.create创造 创建 10.wal…...

青少年编程考试 CCF GESP图形化编程 四级认证真题 2025年3月

图形化编程 四级 2025 年 03 月 一、单选题&#xff08;共 10 题&#xff0c;每题 2 分&#xff0c;共 30 分&#xff09; 1、2025 年春节有两件轰动全球的事件&#xff0c;一个是 DeepSeek 横空出世&#xff0c;另一个是贺岁片《哪吒 2》票房惊人&#xff0c;入了全球票房榜…...

学习海康VisionMaster之平行线查找

一&#xff1a;进一步学习了 今天学习下VisionMaster中的平行线查找&#xff0c;这个还是拟合直线的衍生应用&#xff0c;可以同时测量两条线段&#xff0c;输出中线 二&#xff1a;开始学习 1&#xff1a;什么是平行线查找&#xff1f; 按照传统的算法&#xff0c;必须是开两…...

小甲鱼第004讲:变量和字符串(下)| 课后测试题及答案

问答题: 0. 请问下面代码有没有毛病&#xff0c;为什么? 请问下面代码为什么会出错&#xff0c;应该如何解决&#xff1f; 答:这是由于在字符串中&#xff0c;反斜杠()会与其随后的字符共同构成转义字符。 为了避免这种不测情况的发生&#xff0c;我们可以在字符串的引号前面…...

2025 蓝桥杯省赛c++B组个人题解

声明 本题解为退役蒻苟所写&#xff0c;不保证正确性&#xff0c;仅供参考。 花了大概2个半小时写完&#xff0c;感觉比去年省赛简单&#xff0c;难度大概等价于 codeforces dv4.5 吧 菜鸡不熟悉树上背包&#xff0c;调了一个多小时 题目旁边的是 cf 预测分 所有代码均以通…...

2025蓝桥杯算法竞赛深度突破:创新题型与高阶策略全解析

一、新型算法范式实战 1.1 元启发式算法应用&#xff08;预测难度&#xff1a;★★★★&#xff09; 题目场景&#xff1a;星际货物装载 需在飞船载重限制下选择最优货物组合&#xff0c;引入遗传算法解决NP-Hard问题&#xff1a; 染色体编码&#xff1a;二进制串表示货物选择…...

网络流量管理-流(Flow)

1. 传统网络的问题&#xff1a;快递员送信模式 想象你每天要寄100封信给同一个朋友&#xff0c;传统网络的处理方式就像一个固执的快递员&#xff1a; 每封信都单独处理&#xff1a;检查地址、规划路线、盖章、装车…即使所有信的目的地、收件人都相同&#xff0c;也要重复100…...

Spring Boot对接马来西亚股票数据源API

随着对东南亚市场的兴趣日益增长&#xff0c;获取马来西亚股票市场的实时和历史数据变得尤为重要。本文将指导您如何使用Spring Boot框架对接一个假定的马来西亚股票数据源API&#xff08;例如&#xff0c;StockTV API&#xff09;&#xff0c;以便开发者能够轻松访问和处理这些…...

MySQL 面经

1、什么是 MySQL&#xff1f; MySQL 是一个开源的关系型数据库&#xff0c;现在隶属于 Oracle 公司。是我们国内使用频率最高的一种数据库&#xff0c;我本地安装的是比较新的 8.0 版本。 1.1 怎么删除/创建一张表&#xff1f; 可以使用 DROP TABLE 来删除表&#xff0c;使用…...

【Flink运行时架构】作业提交流程

本文介绍在单作业模式下Flink提交作业的具体流程&#xff0c;如下图所示。 客户端将作业提交给YARN的RM&#xff1b;YARN的RM启动Flink JobManager&#xff0c;并将作业提交给JobMaster&#xff1b;JobMaster向Flink内置的RM请求slots&#xff1b;Flink内置的RM向YARN RM请求…...

【AutoTest】自动化测试工具大全(Java)

&#x1f60a; 如果您觉得这篇文章有用 ✔️ 的话&#xff0c;请给博主一个一键三连 &#x1f680;&#x1f680;&#x1f680; 吧 &#xff08;点赞 &#x1f9e1;、关注 &#x1f49b;、收藏 &#x1f49a;&#xff09;&#xff01;&#xff01;&#xff01;您的支持 &#x…...

当DRAM邂逅SSD:新型“DRAM+”存储技术来了!

在当今快速发展的科技领域&#xff0c;数据存储的需求日益增长&#xff0c;对存储设备的性能和可靠性提出了更高的要求。传统DRAM以其高速度著称&#xff0c;但其易失性限制了应用范围&#xff1b;而固态硬盘SSD虽然提供非易失性存储&#xff0c;但在速度上远不及DRAM。 为了解…...

【算法】快速排序

算法系列六&#xff1a;快速排序 一、快速排序的递归探寻 1.思路 2.书写 3.搭建 3.1设计过掉不符情况&#xff08;在最底层时&#xff09; 3.2查验能实现基础结果&#xff08;在最底层往上点时&#xff09; 3.3跳转结果继续往上回搭 4.实质 二、快速排序里的基准排序 …...

Python快速入门指南:从零开始掌握Python编程

文章目录 前言一、Python环境搭建&#x1f94f;1.1 安装Python1.2 验证安装1.3 选择开发工具 二、Python基础语法&#x1f4d6;2.1 第一个Python程序2.2 变量与数据类型2.3 基本运算 三、Python流程控制&#x1f308;3.1 条件语句3.2 循环结构 四、Python数据结构&#x1f38b;…...

机器学习中的数学(PartⅡ)——线性代数:2.1线性方程组

概述&#xff1a; 现实中很多问题都可被建模为线性方程组问题&#xff0c;而线性代数为我们提供了解决这类问题的工具。先看两个例子&#xff1a; 例子1&#xff1a; 一家公司有n个产品&#xff0c;分别是&#xff0c;生产上述产品需要m种原料&#xff0c;每个产品需要其中一…...

大模型上下文协议MCP详解(2)—核心功能

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl1. 标准化上下文交互技术 1.1 实时数据接入能力 MCP(Model Context Protocol)通过标准化的接口,为 AI 模型提供了强大的实时数据接入能力,使其能够快速获取和处理来自不同数据源的实时信息。…...

检测到目标URL存在http host头攻击漏洞

漏洞描述 修复措施 方法一: nginx 的 default_server 指令可以定义默认的 server 去处理一些没有匹配到 server_name 的请求,如果没有显式定义,则会选取第一个定义的 server 作为 default_server。 server {listen 80 default_server; …...

【 Beautiful Soup (bs4) 详解】

引言 Beautiful Soup 是 Python 最流行的 HTML/XML 解析库&#xff0c;能够从复杂的网页文档中高效提取数据。以下是其核心知识点及示例代码。 一、库简介 1. 核心模块 BeautifulSoup&#xff1a;主类&#xff0c;用于构建文档树结构Tag&#xff1a;表示 HTML/XML 标签的对象…...

Cuto壁纸 2.6.9 | 解锁所有高清精选壁纸,无广告干扰

Cuto壁纸 App 提供丰富多样的壁纸选择&#xff0c;涵盖动物、风景、创意及游戏动漫等类型。支持分类查找与下载&#xff0c;用户可轻松将心仪壁纸设为手机背景&#xff0c;并享受软件内置的编辑功能调整尺寸。每天更新&#xff0c;确保用户总能找到新鲜、满意的壁纸。 大小&am…...

人工智能之数学基础:复矩阵

本文重点 复矩阵是线性代数中以复数为元素的矩阵,是实矩阵在复数域上的自然推广。与实矩阵相比,复矩阵在数学性质、运算规则和应用场景上具有独特性,尤其在量子力学、信号处理、控制理论等领域发挥关键作用。 复矩阵的定义与表示 定义:复矩阵指的是元素含有复数的矩阵。…...

numpy初步掌握

文章目录 一、前言二、概述2.1 安装2.2 基础 三、数组3.1 数组创建3.1.1 从已有数据创建3.1.2 创建特殊值数组3.1.3 创建数值范围数组3.1.4 随机数组生成3.1.5 其他 3.2 数组属性 四、数组操作4.1 索引/切片4.2 数组遍历4.3 修改形状4.4 更多 五、数组运算5.1 常规运算5.2 广播…...

unity曲线射击

b站教程 using UnityEngine; using System.Collections;public class BallLauncher : MonoBehaviour {public float m_R;public NewBullet m_BulletPre;public Transform m_Target;private void Start(){StartCoroutine(Attack());}private void OnDestroy(){StopAllCoroutine…...

[特殊字符] 各领域 Dummy 开关实现方式大集合

涵盖硬件、软件、工业控制、游戏开发及网络虚拟化场景&#xff1a; &#x1f50c; 1. 电子 / 硬件工程 &#x1f6e0;️ (1) 物理替代方案 &#x1f9f2; 跳线帽&#xff08;Jumper&#xff09;或短路块 &#x1f449; 模拟开关“开/关”状态 ✅ 示例&#xff1a;开发板上的 B…...

深度解析基于 Web Search MCP的Deep Research 实现逻辑

写在前面 大型语言模型(LLM)已成为我们获取信息、生成内容的重要工具。但它们的知识大多截止于训练数据的时间点,对于需要实时信息、跨领域知识整合、多角度观点比较的深度研究 (Deep Research) 任务,它们往往力有不逮。如何让 LLM 突破自身知识的局限,像人类研究员一样,…...

set 的 contains

语法&#xff1a; set<int> num_set; st.contains(num); 在 C 中&#xff0c;!num_set.contains(num - 1) 这行代码通常用于检查一个集合&#xff08;num_set&#xff09;中是否不存在某个值&#xff08;num - 1&#xff09;。以下是对这行代码的详细解释&#xff1a;…...

深度学习总结(7)

用计算图进行自动微分 思考反向传播的一种有用方法是利用计算图(compu- tation graph)​。计算图是TensorFlow和深度学习革命的核心数据结构。它是一种由运算(比如我们用到的张量运算)构成的有向无环图。下图给出了一个模型的计算图表示。 计算图是计算机科学中一个非常…...

linux网络环境配置

今天我们来了解一下ip获取的两种方式,知道两者的特点,并且学会配置静态ip,那么话不多说,来看. linux网络环境配置. .第一种方式(自动获取): 说明:登录后,通过界面的来设置自动获取ip,特点;Linux启动后会自动获取ip,缺点是每次自动获取的ip地址可能不一样. 第二种方式(指定I…...

SSRF漏洞公开报告分析

文章目录 1. SSRF | 获取元数据 | 账户接管2. AppStore | 版本上传表单 | Blind SSRF3. HOST SSRF一、为什么HOST修改不会影响正常访问二、案例 4. Turbonomic 的 终端节点 | SSRF 获取元密钥一、介绍二、漏洞分析 5. POST | Blind SSRF6. CVE-2024-40898利用 | SSRF 泄露 NTL…...

Java接口深度解析

一、为什么需要接口 接口是Java实现多态的重要机制&#xff0c;核心价值体现在&#xff1a; ​​实现多继承能力​​&#xff1a;突破单继承限制&#xff0c;允许类实现多个接口​​规范系统解耦​​&#xff1a;制定通用标准&#xff0c;隔离实现与调用方​​增强扩展性​​…...

VitePress 项目部署 cloudflare page 提示 npm run build 错误

构建的错误信息如下&#xff1a; 09:52:57.975 ➤ YN0000: Done with warnings in 3s 120ms 09:52:58.072 Executing user command: npm run build 09:52:58.817 npm ERR! Missing script: "build" 09:52:58.818 npm ERR! 09:52:58.818 npm ERR! To see a list of …...

#Hash 模式 vs History 模式

&#x1f4cc; 一、概念对比&#xff1a;Hash 模式 vs History 模式 特性Hash 模式History 模式URL 样式http://example.com/#/homehttp://example.com/home是否刷新页面❌ 不会刷新&#xff08;仅 hash 变化&#xff09;✅ 通过 HTML5 API 控制&#xff0c;不刷新原理window.…...

图像融合(Image Fusion)是什么

图像融合&#xff08;Image Fusion&#xff09;将来自相同类型传感器或成像方式的多幅图像&#xff08;通常内容是一样的&#xff09;进行融合&#xff0c;提高图像清晰度、对比度、空间或时间分辨率。得到比原始图像更清晰或信息更丰富的图像 常见类型&#xff1a; 多时相图…...

基于YOLOV8的中草药识别检测系统(包含数据集+PyQt5界面+系统代码)

一、简介 本项目构建了基于 YOLOV8 深度学习网络模型的中草药识别检测系统。凭借 YOLOV8 卓越的性能&#xff0c;该系统能够高效、精准地识别检测大枣、 百合、黄连 、乌梅、厚朴 、牡蛎 、海马 、罗汉果 、甘草、三七、 通草、 薏苡仁、 枸杞子 、八角茴香等 50种常见植物中草…...

【愚公系列】《高效使用DeepSeek》066-纠纷解决话术

🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! 👉 江湖人称"愚公搬代码",用七年如一日的精神深耕技术领域,以"…...

7. 解立方根

题目描述 给定一个正整数 N&#xff0c;请你求 N 的立方根是多少。 输入描述 第 1 行为一个整数 T&#xff0c;表示测试数据数量。 接下来的 T 行每行包含一个正整数 N。 1≤T≤105&#xff0c;0≤N≤105。 输出描述 输出共 T 行&#xff0c;分别表示每个测试数据的答案…...

【愚公系列】《Python网络爬虫从入门到精通》047-验证码识别(第三方验证码识别)

🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! 👉 江湖人称"愚公搬代码",用七年如一日的精神深耕技术领域,以"…...

C++指针(二)

个人主页&#xff1a;PingdiGuo_guo 收录专栏&#xff1a;C干货专栏 前言 本篇是介绍数组指针与指针数组的概念&#xff0c;用处&#xff0c;操作以及练习的。点赞破五十&#xff0c;更新下一期。 文章目录 1.数组指针 1.1数组指针的概念 1.2数组指针的用处 1.3数组指针的操…...

C++有关内存的那些事

个人主页&#xff1a;PingdiGuo_guo 收录转栏&#xff1a;C干货专栏 前言 本篇博客是讲解关于C内存的一些知识点的。 文章目录 前言 1.内存函数 1.1memcpy函数 1.2memmove函数 1.3 memset函数 2.各数据类型占用 2.1bool类型 2.2char类型 2.3short、int、long类型及整数…...

4.11时钟延迟

时钟偏差&#xff1a;同一个时钟域内的时钟信号到达数字电路的各个部分&#xff08;寄存器&#xff09;所用的时间差异 信号达到目标寄存器与接收寄存器的时间差【一般默认信号经过电路时间不计&#xff0c;】 图源&#xff1a;优化时钟网络之时钟偏移-CSDN博客 时钟周期是计…...

下列软件包有未满足的依赖关系: python3-catkin-pkg : 冲突: catkin 但是 0.8.10-

下列软件包有未满足的依赖关系: python3-catkin-pkg : 冲突: catkin 但是 0.8.10- 解决&#xff1a; 1. 确认当前的包状态 首先&#xff0c;运行以下命令来查看当前安装的catkin和python3-catkin-pkg版本&#xff0c;以及它们之间的依赖关系&#xff1a; dpkg -l | grep ca…...

ANSI C 和 C89/C90

在嵌入式开发中提到的 ANSI 通常是指 ANSI C 标准&#xff0c;而 C89 是该标准的另一个名称。以下是详细的解释和两者的关系&#xff1a; 1. ANSI C 是什么&#xff1f; ANSI&#xff08;American National Standards Institute&#xff0c;美国国家标准协会&#xff09;在 19…...