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

优化02-执行计划

Oracle 的执行计划(Execution Plan)是数据库优化器(Optimizer)为执行 SQL 语句而选择的操作路径和资源分配方案的详细描述。它记录了数据库如何访问表、索引、连接数据以及执行排序、过滤等操作的步骤。理解执行计划是性能调优的核心技能之一。

执行计划的作用

  1. 指导 SQL 执行:明确数据库如何读取数据(全表扫描、索引扫描)、如何连接表(嵌套循环、哈希连接)、如何排序(SORT)等。
  2. 评估性能:通过成本(Cost)和行数(Rows)估算,判断执行路径的效率。
  3. 诊断性能问题:发现全表扫描、低效连接方法、缺失索引等问题。

获取执行计划的方法

explain plan for 方式

SQL> set linesize 200
SQL> set pagesize 999
SQL> explain plan for  select * from emp where empno=7788;Explained.SQL> select * from table(dbms_xplan.display());PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------
Plan hash value: 2949544139--------------------------------------------------------------------------------------
| Id  | Operation                   | Name   | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |        |     1 |    87 |     1   (0)| 00:00:01 |
|   1 |  TABLE ACCESS BY INDEX ROWID| EMP    |     1 |    87 |     1   (0)| 00:00:01 |
|*  2 |   INDEX UNIQUE SCAN         | PK_EMP |     1 |       |     1   (0)| 00:00:01 |
--------------------------------------------------------------------------------------Predicate Information (identified by operation id):
---------------------------------------------------2 - access("EMPNO"=7788)14 rows selected.

优点:无需真正执行,效率高

缺点:

  • 没有运行时的一些统计信息,如逻辑读、物理的等。
  • 无法判断表的访问次数、每一步的真正处理行数

set autorace 方式

set autotrace on :会输出执行结果和执行计划
set autotrace traceonly: 不输出执行结果,输出执行计划
set autotrace traceonly explain: 不输出执行结果,只输出执行计划部分
set autotrace traceonly statistic:不输出执行结果,只输出统计信息部分

SQL>  set autotrace traceonly;
SQL> select * from emp where empno=7788;Execution Plan
----------------------------------------------------------
Plan hash value: 2949544139--------------------------------------------------------------------------------------
| Id  | Operation                   | Name   | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |        |     1 |    87 |     1   (0)| 00:00:01 |
|   1 |  TABLE ACCESS BY INDEX ROWID| EMP    |     1 |    87 |     1   (0)| 00:00:01 |
|*  2 |   INDEX UNIQUE SCAN         | PK_EMP |     1 |       |     1   (0)| 00:00:01 |
--------------------------------------------------------------------------------------Predicate Information (identified by operation id):
---------------------------------------------------2 - access("EMPNO"=7788)Statistics
----------------------------------------------------------1  recursive calls0  db block gets2  consistent gets0  physical reads0  redo size899  bytes sent via SQL*Net to client596  bytes received via SQL*Net from client1  SQL*Net roundtrips to/from client0  sorts (memory)0  sorts (disk)1  rows processed

优点:可以输出运行时的统计信息,而且有开关参数控制显示想要的部分

缺点:语句真正执行,如果语句执行时间较长会浪费时间,无法看到表被访问的次数。

statistic_level=all方式

 alter session set statistics_level=all;
SQL>  select * from scott.emp where empno=7788;EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------7788 SCOTT      ANALYST         7566 19-APR-87       3000                    20SQL> select * from table (dbms_xplan.display_cursor(null,null,'allstats last'));PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------
SQL_ID  bkacg30nr9ada, child number 0
-------------------------------------select * from scott.emp where empno=7788Plan hash value: 2949544139------------------------------------------------------------------------------------------------
| Id  | Operation                   | Name   | Starts | E-Rows | A-Rows |   A-Time   | Buffers |
------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |        |      1 |        |      1 |00:00:00.01 |       2 |
|   1 |  TABLE ACCESS BY INDEX ROWID| EMP    |      1 |      1 |      1 |00:00:00.01 |       2 |
|*  2 |   INDEX UNIQUE SCAN         | PK_EMP |      1 |      1 |      1 |00:00:00.01 |       1 |
------------------------------------------------------------------------------------------------Predicate Information (identified by operation id):
---------------------------------------------------2 - access("EMPNO"=7788)
--关键指标解释:
--Starts:该sql执行的次数。
--E-Rows:执行计划预计的行数。
--A-Rows:实际返回的行数。A-Rows跟E-Rows做比较,就可以确定哪一步执行计划出了问题。
--A-Time:每一步实际执行的时间(HH:MM:SS.FF),根据这一行可以知道该sq!耗时在了哪个地方。
--Buffers:每一步实际执行的逻辑读或一致性读。
--Reads:物理读。
--OMem:当前操作完成所有内存工作区(Work Aera)操作所总共使用私有内存(PGA)中工作区的大小这个数据是由优化器统计数据以及前一次执行的性能数据估算得出的
--1Mem:当工作区大小无法满足操作所需的大小时,需要将部分数据写入临时磁盘空间中(如果仅需要写入一次就可以完成操作就称一次通过,One-Pass;否则为多次通过,Multi Pass).该列数据为语句最后一次执行中,单次写磁盘所需要的内存大小,这个由优化器统计数据以及前一次执行的性能数据估算得出的
--User-Mem:语句最后一次执行中,当前操作所使用的内存工作区大小,括号里面为(发生磁盘交换的次数,1次即为One-Pass,大于1次则为Multi Pass,如果没有使用磁盘,则显示OPTIMAL)
--OMem、1Mem为执行所需的内存评估值,0Mem为最优执行模式所需内存的评估值,1Mem为one-pass模式所需内存的评估值。0/1/M 为最优/one-pass/multipass执行的次数。Used-Mem耗的内存

优点:

  • 可以清晰的从starts得出表被访问多少
  • 可以清晰的从E-ROWS和A-ROWS中得到预测的行数和真实的行数,从而可以准确判断Oracle评估是否准确
  • 虽然没有专门的输出运行时的相关统计信息,但是执行计划中的BUFFERS就是真实的逻辑读的多少

缺陷:

  • 必须要等到语句真正执行完毕后,才可以出结果。
  • 无法控制记录输屏打出,不像autotrace有 traceonly 可以控制不将结果打屏输出
  • 看不出递归调用的次数,看不出物理读的多少

根据SQL_ID获取

使用dbms_xplan.display_cursor从共享池获取

SQL> select * from table(dbms_xplan.display_cursor('azysqasqbkkva'));PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------
SQL_ID  azysqasqbkkva, child number 0
-------------------------------------
select * from scott.emp where empno=7788Plan hash value: 2949544139--------------------------------------------------------------------------------------
| Id  | Operation                   | Name   | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |        |       |       |     1 (100)|          |
|   1 |  TABLE ACCESS BY INDEX ROWID| EMP    |     1 |    87 |     1   (0)| 00:00:01 |
|*  2 |   INDEX UNIQUE SCAN         | PK_EMP |     1 |       |     1   (0)| 00:00:01 |
--------------------------------------------------------------------------------------Predicate Information (identified by operation id):
---------------------------------------------------2 - access("EMPNO"=7788)

使用bms_xplan.display_awr从awr视图中获取

SQL> select * from table(dbms_xplan.display_awr('azysqasqbkkva'));no rows selected--这里没有显示是因为执行的SQL还未生成快照,比如没30分钟生成一次快照,9点09执行SQL,想要通过awr获取执行计划,需要等到9点30之后才会查到。

优点:

  • 知道sql id立即可得到执行计划,和explain plan for 一样无需执行;
  • 可以得到真实的执行计划。

缺陷:

  • 没有输出运行时的相关统计信息(产生多少逻辑读,多少次递归调用,多少次物理读的情况);
  • 无法判断是处理了多少行;
  • 无法判断表被访问了多少次。

通过trace获取

详解10046和10053

awrsqrpt.sql获取

 @?/rdbms/admin/awrsqrpt.sql --按提示输入SQL_ID 最后生成HTML格式的SQL报告,里面包含执行计划

PLSQL/deveploer查看

​ 在SQL界面按F5获取

使用场景

  • 如果某SQL执行非常长时间才会出结果,甚至慢到返回不了结果,这时候看执行计划就只能用方法1,如果之前执行完成过,并且知道sqlid,可以考虑使用方式4和6;
  • 跟踪某条SQL最简单的方法是方法1,其次就是方法2;
  • 如果想观察到某条SQL有多条执行计划的情况,只能用方法4和方法6;
  • 如果SQL中含有多函数,函数中套有SQL等多层递归调用,想准确分析,只能使用方法5;
  • 要想确保看到真实的执行计划,不能用方法1
  • 要想获取表被访问的次数,只能使用方法3;

执行计划的关键组成部分

操作(Operation)

  • 描述数据访问方式,例如:
    • TABLE ACCESS:表访问(全表扫描 FULL 或索引扫描 INDEX)。
    • INDEX:索引操作(范围扫描 RANGE SCAN、唯一扫描 UNIQUE SCAN)。
    • HASH JOIN:哈希连接。
    • NESTED LOOPS:嵌套循环连接。

选项(Options)

  • 补充操作细节,例如:
    • FULL:全表扫描。
    • RANGE SCAN:索引范围扫描。
    • USE_NL:使用嵌套循环连接。

对象(Object Name)

  • 涉及的表、索引或中间结果集名称。

成本(Cost)

  • 优化器估算的总成本(越低越好)。
  • 包含 CPU 和 I/O 成本。

行数(Rows)

  • 优化器估算的每一步返回的行数(可能不准确,需结合实际数据分布)。

谓词(Predicate)

  • 过滤条件(PREDICATE INFORMATION部分):

  • ACCESS`:用于定位数据的条件(如索引列的值)。

  • FILTER:用于过滤数据的条件(如 WHERE department_id = 10)。

总结

执行计划是 SQL 性能调优的核心工具。通过分析操作类型、成本、行数和谓词,可以定位全表扫描、低效连接、缺失索引等问题。结合统计信息维护、索引优化和 SQL 重写,能够显著提升数据库性能。对于复杂场景,需借助 SQL Trace、AWR 报告和自适应优化工具进行深度诊断。

相关文章:

优化02-执行计划

Oracle 的执行计划(Execution Plan)是数据库优化器(Optimizer)为执行 SQL 语句而选择的操作路径和资源分配方案的详细描述。它记录了数据库如何访问表、索引、连接数据以及执行排序、过滤等操作的步骤。理解执行计划是性能调优的核…...

FreeRTOS菜鸟入门(十一)·信号量·二值、计数、递归以及互斥信号量的区别·优先级翻转以及继承机制详解

目录 1. 信号量的基本概念 2. 分类 2.1 二值信号量 2.2 计数信号量 2.3 互斥信号量 2.4 递归信号量 3. 应用场景 3.1 二值信号量 3.2 计数信号量 3.3 互斥信号量 3.4 递归信号量 4. 运作机制 4.1 二值信号量 4.2 计数信号量 4.3 互斥信号量 4.4…...

C++ -- 内存管理

C --内存管理 1. C/C内存分布2. C中动态内存管理3. C中动态内存管理4. 面对自定义类型5. operator new和operator delete6. new和delete的实现原理6.1 内置类型6.2 自定义类型 7. 定位new(placement new)7.1 底层机制7.2 本质 1. C/C内存分布 2. C中动态…...

基于muduo库实现高并发服务器

文章目录 一、项目介绍二、HTTP服务器1.概念2.Reactor模型2.1单Reactor单线程:单I/O多路复用业务处理2.2单Reactor多线程:单I/O多路复用线程池(业务处理)2.3多Reactor多线程:多I/O多路复用线程池(业务处理&…...

开源PDF解析工具Marker深度解析

开源PDF解析工具Marker深度解析 检索增强生成(RAG)系统的第一步就是做 pdf 解析,从复杂多样的 pdf 中提取出干净准确的文本内容。现有的最优秀的开源工具有两个:Marker 和 MinerU。因为 Marker 是个人开发者做的,文档…...

Redis的内存淘汰机制

Redis的内存淘汰机制和过期策略是2个完全不同的机制, 过期策略指的是使用那种策略来删除过期键,Redis的内存淘汰机制是指:当Redis的运行内存已经超过设置的最大运行内存时,采用什么策略来删除符合条件的键值对,以此来保…...

我国“东数西算”工程对数据中心布局的长期影响

首席数据官高鹏律师团队 我国“东数西算”工程作为国家级战略,旨在优化全国算力资源配置,推动数字经济发展,其对数据中心布局的长期影响主要体现在以下几个方面: 1. 区域协调与资源优化配置 东部与西部分工明确:东部…...

CPT204 Advanced Obejct-Oriented Programming 高级面向对象编程 Pt.10 二叉搜索树

文章目录 1.二叉树(Binary Trees)1.1 二叉搜索树(Binary Search Tree,简称BST)1.1.1 插入操作1.1.2 搜索操作1.1.3 树的遍历(Tree Traversal)1.1.3.1 前序遍历(Preorder Traversal&a…...

MinIO实现https访问

Windows下实现MinIO的https访问. 首先需要自己解决证书问题, 这里可以是个人证书 也可以是花钱买的证书. 现在使用个人开发者证书举例子。 将证书数据解压到你知道的目录之下 然后直接使用命令启动MinIO start minio.exe server --certs-dir D:\xxxxx\tools\certs …...

查看并升级Docker里面Jenkins的Java17到21版本

随着时间推移,java17将逐渐退出舞台,取而代之的是java21。Jenkins也在逐步升级淘汰java版本,今天教大家升级java版本。 Jenkins问题提示 Java 17 end of life in Jenkins You are running Jenkins on Java 17, support for which will end o…...

【KWDB 创作者计划】KWDB 2.2.0多模融合架构与分布式时序引擎

KWDB介绍 KWDB数据库是由开放原子开源基金会孵化的分布式多模数据库,专为AIoT场景设计,支持时序数据、关系数据和非结构化数据的统一管理。其核心架构采用多模融合引擎,集成列式时序存储、行式关系存储及自适应查询优化器,实现跨模…...

Redis的过期设置和策略

Redis设置过期时间主要有以下几个配置方式 expire key seconds 设置key在多少秒之后过期pexpire key milliseconds 设置key在多少毫秒之后过期expireat key timestamp 设置key在具体某个时间戳(timestamp:时间戳 精确到秒)过期pexpireat key millisecon…...

2.3 向量组

本章主要考查向量组的线性关系、秩与极大无关组、向量空间等核心内容,是线性代数的重要基础模块。以下从四个核心考点展开系统梳理: 考点一:向量组的线性表示 核心问题:如何用一组向量线性表出另一组向量?如何判断线性…...

协议(消息)生成

目录 协议(消息)生成主要做什么? 知识点二 制作功能前的准备工作 ​编辑​编辑 制作消息生成功能 实现效果 ​总结 上一篇中配置的XML文件可见: https://mpbeta.csdn.net/mp_blog/creation/editor/147647176 协议(消息)生成主要做什么? //协议生成 主要是…...

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】4.5 清洗流程自动化(存储过程/定时任务)

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 PostgreSQL数据清洗自动化:存储过程与定时任务全攻略4.5 清洗流程自动化:构建智能数据处理管道4.5.1 存储过程:复杂清洗逻辑封装4.5.1.1 …...

Python中有序序列容器的概念及其与可变性的关系

什么是有序序列容器? 有序序列容器是Python中一类重要的数据类型,它们具有以下共同特征: 元素有序排列:元素按照插入顺序存储,可以通过位置(索引)访问 可迭代:可以使用for循环遍历…...

数据结构实验8.1:图的基本操作

文章目录 一,实验目的二,实验内容三,实验要求四,算法分析五,示例代码8-1.cpp源码graph.h源码 六,操作步骤七,运行结果 一,实验目的 1.掌握图的邻接矩阵、邻接表的表示方…...

PostgreSQL 的 pg_current_wal_lsn 函数

PostgreSQL 的 pg_current_wal_lsn 函数 pg_current_wal_lsn 是 PostgreSQL 中用于获取当前预写式日志(WAL)写入位置的关键函数,对于数据库监控、复制管理和恢复操作至关重要。 一 基本说明 语法 pg_current_wal_lsn() RETURNS pg_lsn功能 返回当前的 WAL 写入…...

P6822 [PA 2012 Finals] Tax 题解

题目大意 可恶,我们老师竟然把紫题放到了模拟赛里。 题目传送门 原题中题意说的很清楚了。 思路 转化问题 首先先新建两条边,使原题点到点的问题转化成边到边的问题。 可以连接一条从 0 0 0 到 1 1 1,长度为 0 0 0 的边,设这条边为 0 0 0 号边。 还可以连接一条…...

Python异步编程入门:从同步到异步的思维转变

引言 作为一名开发者,你可能已经习惯了传统的同步编程模式——代码一行接一行地执行,每个操作都等待前一个操作完成。但在I/O密集型应用中,这种模式会导致大量时间浪费在等待上。今天,我们将探讨Python中的异步编程,这…...

【Python】使用`python-dotenv`模块管理环境变量

最近田辛老师在进行与AI有关的开发。 在开发和部署 Python 应用程序时(要么是在某个Python环境,要么是在MaxKB等知识库系统),我常常需要根据不同的环境(如开发环境、测试环境、生产环境)使用不同的配置信息…...

破局者手册 Ⅰ:测试开发核心基础,解锁未来测试密钥!

目录 一、引入背景 二、软件测试基础概念 2.1 软件测试的定义 2.2 软件测试的重要性 2.3 软件测试的原则 三、测试类型 3.1 功能测试 3.2 接口测试 3.2.1 接口测试的概念 3.2.2 接口测试的重要性 3.2.3 接口测试的要点 3.2.4 接口测试代码示例(Python r…...

物联网mqtt和互联网http协议区别

MQTT和HTTP是两种不同的网络协议,它们在以下方面存在区别: 一、连接方式 1.MQTT:基于TCP/IP协议,采用长连接方式。客户端与服务器建立连接后,会保持连接状态,可随时进行数据传输,适用于实时性…...

C++笔记之反射、Qt中的反射系统、虚幻引擎中的反射系统

C++笔记之反射、Qt中的反射系统、虚幻引擎中的反射系统 code review! 目录 C++笔记之反射、Qt中的反射系统、虚幻引擎中的反射系统 目录1. 反射基础概念 1...

提示词压缩方法总结与开源工具包

论文标题 AN EMPIRICAL STUDY ON PROMPT COMPRESSION FOR LARGE LANGUAGE MODELS 论文地址 https://arxiv.org/pdf/2505.00019 开源地址 https://github.com/3DAgentWorld/Toolkit-for-Prompt-Compression 作者背景 香港科技大学广州校区,华南理工大学&#…...

【AI提示词】AARRR 模型执行者

提示说明 具备完整的产品知识和数据分析能力,擅长通过AARRR模型优化用户生命周期管理,提升企业收入和市场拓展。 提示词 # Role: AARRR 模型执行者## Profile - language: 中文 - description: 具备完整的产品知识和数据分析能力,擅长通过…...

深入理解 Redis 的主从、哨兵与集群架构

目录 前言1 Redis 主从架构1.1 架构概述1.2 优点与应用场景1.3 局限性 2 Redis 哨兵架构2.1 架构概述2.2 高可用能力的实现2.3 局限与注意事项 3 Redis 集群架构3.1 架构概述3.2 高性能与高可用的统一3.3 限制与挑战 4 架构对比与选型建议结语 前言 在构建高性能、高可用的数据…...

基于CBOW模型的词向量训练实战:从原理到PyTorch实现

基于CBOW模型的词向量训练实战:从原理到PyTorch实现 在自然语言处理(NLP)领域,词向量是将单词映射为计算机可处理的数值向量的重要方式。通过词向量,单词之间的语义关系能够以数学形式表达,为后续的文本分…...

【阿里云大模型高级工程师ACP习题集】2.9 大模型应用生产实践(下篇)

练习题 【单选题】在大模型应用备案中,根据《生成式人工智能服务管理暂行办法》,已上架但未完成合规手续的应用应如何处理?( ) A. 继续运营,同时补办手续 B. 下架处理 C. 暂停部分功能,直至完成合规手续 D. 无需处理,等待监管部门通知 【多选题】在应用服务安全的应用部…...

Matlab实现CNN-BiLSTM时间序列预测未来

Matlab实现CNN-BiLSTM时间序列预测未来 目录 Matlab实现CNN-BiLSTM时间序列预测未来效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现CNN-BiLSTM时间序列预测未来; 2.运行环境Matlab2023b及以上,data为数据集,单变量时间序…...

互联网大厂Java求职面试:AI大模型与云原生架构设计深度解析

互联网大厂Java求职面试:AI大模型与云原生架构设计深度解析 第一轮提问:AI大模型与系统集成 技术总监(张总):郑薪苦,你之前提到过Spring AI,那你能讲讲在实际项目中如何将大模型集成到系统中&…...

GD32F103C8T6多串口DMA空闲中断通信程序

以下是一个完全符合C99标准的GD32F103C8T6多串口DMA通信完整实现&#xff0c;代码经过Keil MDK验证并包含详细注释&#xff1a; #include "gd32f10x.h" #include <string.h>/* 硬件配置宏 */ #define USART_NUM 2 /* 使用2个串口 */ #define R…...

labelimg快捷键

一、核心标注快捷键 ‌W‌&#xff1a;调出标注十字架&#xff0c;开始绘制矩形框&#xff08;最常用功能&#xff09;‌A/D‌&#xff1a;切换上一张(A)或下一张(D)图片&#xff0c;实现快速导航‌Del‌&#xff1a;删除当前选中的标注框 二、文件操作快捷键 ‌CtrlS‌&…...

【深度学习-Day 6】掌握 NumPy:ndarray 创建、索引、运算与性能优化指南

Langchain系列文章目录 01-玩转LangChain&#xff1a;从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块&#xff1a;四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain&#xff1a;从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...

开元类双端互动组件部署实战全流程教程(第2部分:控制端协议拆解与机器人逻辑调试)

作者&#xff1a;那个写了个机器人结果自己被踢出房间的开发者 游戏逻辑房间结构参考界面 从这张图我们能看出&#xff0c;该组件按功能结构细分为多个房间&#xff0c;每个房间底注、准入标准不同&#xff0c;对应的控制模块也有层级区分。常规来说&#xff0c;一个“互动房间…...

51单片机入门教程——蜂鸣器播放天空之城

前言 本教程基于B站江协科技课程进行个人学习整理&#xff0c;专为拥有C语言基础的零基础入门51单片机新手设计。既帮助解决因时间差导致的设备迭代调试难题&#xff0c;也助力新手快速掌握51单片机核心知识&#xff0c;实现从C语言理论到单片机实践应用的高效过渡 。 目录 …...

linux 历史记录命令

命令方式 #/bin/bash #cd /tmp saveFile"tmp.log" isok"grep HISTTIMEFORMAT /etc/profile|wc -l" if [ $isok -eq 0 ] thenecho -e "#history time\nHISTFILESIZE4000\nHISTSIZE4000\nHISTTIMEFORMAT%F %T \nexport HISTTIMEFORMAT\n" >>…...

手表关于MPU6050中的功能实现

MPU6050 OV-Watch 中的睡眠和唤醒功能实现 OV-Watch 项目为 MPU6050 传感器实施了复杂的电源管理&#xff0c;以优化电池寿命&#xff0c;同时保持手腕检测和计步功能。以下是对睡眠和唤醒机制的详细分析&#xff1a; 内核休眠/唤醒功能实现 MPU6050 有两个主要功能来控制其…...

Qt中数据结构使用自定义类————附带详细示例

文章目录 C对数据结构使用自定义类1 QMap使用自定义类1.1 使用自定义类做key1.2 使用自定义类做value 2 QSet使用自定义类 参考 C对数据结构使用自定义类 1 QMap使用自定义类 1.1 使用自定义类做key QMap<key,value>中数据存入时会对存入key值的数据进行比较&#xff…...

深入浅出数据库的函数依赖关系

数据库的“恋爱关系”&#xff1a;函数依赖的那些事儿 在数据库的世界里&#xff0c;属性之间也存在“恋爱关系”。有些属性是“灵魂伴侣”&#xff0c;彼此绑定&#xff1b;有些是“单向奔赴”&#xff0c;只能依赖对方&#xff1b;还有些是“三角恋”&#xff0c;通过中间人…...

C语言易混淆知识点详解

C语言中容易混淆的知识点详解 C语言作为一门基础且强大的编程语言&#xff0c;有许多容易混淆的概念和特性。以下是C语言中一些常见易混淆知识点的详细解析&#xff1a; 1. 指针与数组 相似点&#xff1a; c 复制 下载 int arr[10]; int *ptr arr; 都可以使用[]运算符访…...

如何选择合适的光源?

目录 工业相机光源类型全面指南 1. 环形光源及其变体 高角度环形光源 优点 缺点 典型应用场景 低角度环形光源&#xff08;暗场照明&#xff09; 优点 缺点 典型应用场景 2. 条形光源与组合照明系统 技术特点 组合条形光源 优点 缺点 典型应用场景 3. 同轴光源…...

模块方法模式(Module Method Pattern)

&#x1f9e0; 模块方法模式&#xff08;Module Method Pattern&#xff09; 模块方法模式是一种结构型设计模式&#xff0c;它将复杂的操作分解成一系列相对简单、独立且单一职责的模块。每个模块负责完成一种具体的操作&#xff0c;其他模块或系统可以通过调用这些模块的公开…...

OpenCV第6课 图像处理之几何变换(仿射)

1.仿射变换 2. 平移 3 旋转 附录A 二维旋转矩阵 附录B 三维旋转矩阵与轴角表示 1.仿射变换 仿射变换是指图像可以通过一系列的几何变换来实现平移、旋转等多种操作。该变换能够保持图像的平直性和平行性。 平直性是指图像经过仿射变换后,直线仍然是直线,平行性是指图像在…...

【中间件】brpc_基础_TimerThread

文章目录 TimerThread1 简介2 主要设计点2.1 数据结构&#xff1a;分层时间轮&#xff08;Hierarchical Timing Wheel&#xff09;2.2 线程模型2.3 任务管理 3 关键代码分析3.1 类定义&#xff08;timer_thread.h&#xff09;3.2 时间轮初始化&#xff08;timer_thread.cpp&…...

拷贝多个Excel单元格区域为图片并粘贴到Word

Excel工作表Sheet1中有两个报表&#xff0c;相应单元格区域分别定义名称为Report1和Report2&#xff0c;如下图所示。 现在需要将图片拷贝图片粘贴到新建的Word文档中。 示例代码如下。 Sub Demo()Dim oWordApp As ObjectDim ws As Worksheet: Set ws ThisWorkbook.Sheets(&…...

网络原理(6)—— 应用层之HTTP协议

目录 一. 应用层 二. 重要应用层协议DNS(Domain Name System) 三. HTTP协议 3.1 HTTP抓包工具 3.2 HTTP格式 3.2.1 请求 3.2.2 响应 3.3 HTTP的工作过程 一. 应用层 应用层协议就像是人们之间的交流规则&#xff0c;它帮助不同的计算机程序&#xff08;应用&#xff09…...

Linux55yum源配置、本机yum源备份,本机yum源配置,网络Yum源配置,自建yum源仓库

参考 太晚了 计划先休息了 大概保存...

250505_HTML

HTML 1. HTML5语法与基础标签1.1 HTML5特性1.1.1 空白折叠现象1.1.2 转义字符 1.2 HTML注释1.3 基础标签1.3.1 div标签1.3.2 标题标签1.3.3 段落标签1.3.1.3.1.3.1.3. 1. HTML5语法与基础标签 1.1 HTML5特性 1.1.1 空白折叠现象 1.1.2 转义字符 1.2 HTML注释 1.3 基础标签 1…...

1. 设计哲学:让字面量“活”起来,提升表达力和安全性

C11引入的用户定义字面量&#xff08;User-Defined Literals&#xff0c;简称UDL&#xff09;是语言层面为程序员打开的一扇“自定义表达式”的大门。它允许我们为字面量&#xff08;比如数字、字符、字符串&#xff09;添加自定义后缀&#xff0c;从而让代码更具语义化、更易读…...