WITH 临时表 SQL优化
在 SQL 优化中, 临时表(CTE,Common Table Expression,公共表表达式) 是一种强大的工具,它通过定义一个临时的结果集(可以理解为 “虚拟表”),让复杂查询更易读、更高效,尤其在处理多层子查询、递归查询或需要复用中间结果时优势明显。以下结合 Oracle 数据库和实际案例,深入解析 CTE 的优化原理和使用方法。
一、CTE 的核心原理与优势
1. 什么是 CTE?
CTE 是一个命名的临时结果集,通过 WITH
关键字定义,仅在当前 SQL 语句中有效。语法如下:
sql
WITH cte_name (column1, column2, ...) AS (SELECT statement -- 子查询或表表达式
)
-- 后续使用cte_name作为表名
SELECT * FROM cte_name;
2. 核心优势
- 可读性强:将复杂子查询拆解为多个逻辑清晰的 CTE,避免多层嵌套的
SELECT
。 - 结果复用:同一个 CTE 可在后续查询中多次引用,避免重复计算。
- 支持递归:处理层级数据(如部门树、组织架构)时,递归 CTE 比传统自连接更简洁。
- 执行优化:部分数据库(如 Oracle)会将 CTE 的结果物化(Materialize),减少子查询重复执行,提升性能。
二、CTE 优化 SQL 的典型场景
场景 1:替代多层嵌套子查询,提升可读性与性能
问题:原始 SQL 通过多层子查询统计用户订单信息,嵌套深、难维护,且子查询重复计算。
优化前(嵌套子查询):
sql
SELECTu.user_id,u.name,(SELECT COUNT(*) FROM orders o1 WHERE o1.user_id = u.user_id) AS order_count,(SELECT AVG(amount) FROM orders o2 WHERE o2.user_id = u.user_id) AS avg_amount
FROM users u;
优化后(使用 CTE 复用中间结果):
sql
WITH user_orders AS ( -- 定义CTE:用户订单聚合SELECTuser_id,COUNT(*) AS order_count,AVG(amount) AS avg_amountFROM ordersGROUP BY user_id
)
SELECTu.user_id,u.name,uo.order_count,uo.avg_amount
FROM users u
LEFT JOIN user_orders uo ON u.user_id = uo.user_id;
优化原理:
- 将重复的子查询合并为一个 CTE,仅计算一次
GROUP BY user_id
,避免两次扫描orders
表。 - Oracle 会自动优化 CTE 的执行计划,可能将
user_orders
的结果临时存储,减少 IO 和计算量。
场景 2:递归 CTE 处理层级数据(如部门树)
问题:查询某个部门及其所有子部门的层级结构,传统自连接需要多次 JOIN,代码冗余。
优化方案(递归 CTE):
sql
WITH RECURSIVE dept_tree AS ( -- 递归CTE(Oracle 12c+支持RECURSIVE关键字)-- 初始查询:找到根部门(如部门ID=100)SELECT dept_id, parent_dept_id, dept_name, 0 AS levelFROM departmentsWHERE dept_id = 100UNION ALL-- 递归查询:关联子部门SELECT d.dept_id, d.parent_dept_id, d.dept_name, dt.level + 1FROM departments dJOIN dept_tree dt ON d.parent_dept_id = dt.dept_id
)
SELECT * FROM dept_tree; -- 输出所有子部门
优化原理:
- 递归 CTE 通过
UNION ALL
循环查询,每次基于上一次的结果集递归查询子节点,比手动编写多层自连接更高效且易维护。 - Oracle 会优化递归过程,避免重复扫描表,尤其适合层级深度不确定的场景(如无限层级菜单)。
场景 3:CTE 配合窗口函数优化分组统计
问题:统计每个用户的订单总额,并显示其在所属地区的排名,传统写法需嵌套子查询。
优化方案(CTE + 窗口函数):
sql
WITH region_sales AS (SELECTu.user_id,u.region,SUM(o.amount) AS total_sales,RANK() OVER (PARTITION BY u.region ORDER BY SUM(o.amount) DESC) AS region_rankFROM users uJOIN orders o ON u.user_id = o.user_idGROUP BY u.user_id, u.region
)
SELECT * FROM region_sales WHERE region_rank <= 3; -- 取各地区前三
优化原理:
- CTE 先计算每个用户的总销售额和地区排名,后续查询直接过滤结果,避免在窗口函数中重复计算分组逻辑。
- 中间结果在 CTE 中一次性生成,减少计算步骤,提升执行效率。
场景 4:CTE 替代临时表,简化事务处理
问题:传统临时表需显式创建、插入数据、删除,流程繁琐;CTE 可在单个 SQL 中完成临时结果处理。
优化方案(CTE 替代临时表):
sql
-- 传统临时表方案(需多步操作)
CREATE GLOBAL TEMPORARY TABLE temp_orders ON COMMIT DELETE ROWS;
INSERT INTO temp_orders SELECT * FROM orders WHERE create_time >= '2025-01-01';
SELECT u.name, COUNT(*) FROM users u JOIN temp_orders o ON u.user_id = o.user_id GROUP BY u.name;
DROP TABLE temp_orders;-- CTE方案(单语句完成,无需手动管理临时表)
WITH temp_orders AS (SELECT * FROM orders WHERE create_time >= '2025-01-01'
)
SELECT u.name, COUNT(*)
FROM users u
JOIN temp_orders o ON u.user_id = o.user_id
GROUP BY u.name;
优化原理:
- CTE 的作用域仅限当前 SQL,执行完毕后自动销毁,无需手动管理,减少事务复杂度和锁竞争。
- Oracle 可能将 CTE 的结果临时存储在内存或临时表空间中,根据数据量自动优化存储方式。
三、CTE 在 Oracle 中的执行计划与性能优化
1. CTE 的两种执行模式
- 展开模式(Unnesting):Oracle 将 CTE 的子查询直接合并到主查询中,不生成临时结果,适用于简单 CTE。
- 物化模式(Materialization):将 CTE 的结果生成临时表(内存或磁盘),适用于复杂子查询或需多次引用的 CTE。
- 可通过
/*+ MATERIALIZE */
提示强制物化 CTE:sql
WITH temp_orders AS (SELECT /*+ MATERIALIZE */ * FROM orders WHERE create_time >= '2025-01-01' ) ...
- 可通过
2. 分析执行计划
通过 EXPLAIN PLAN
或 Oracle SQL Developer 查看执行计划,确认 CTE 是否被合理优化:
- 若 CTE 被多次引用,确保其结果被物化而非重复执行。
- 避免在 CTE 中使用
SELECT *
,只选取必要字段,减少临时表数据量。
四、在 MyBatis-Plus 中使用 CTE
在 MyBatis-Plus 的 XML 映射文件中,可直接编写包含 CTE 的 SQL 语句:
xml
<select id="getUserSalesRank" resultType="com.example.entity.UserSales">WITH region_sales AS (SELECTu.user_id,u.region,SUM(o.amount) AS total_sales,RANK() OVER (PARTITION BY u.region ORDER BY SUM(o.amount) DESC) AS region_rankFROM users uJOIN orders o ON u.user_id = o.user_idGROUP BY u.user_id, u.region)SELECT * FROM region_sales WHERE region_rank <= 3
</select>
若需动态拼接 CTE(如条件过滤),可通过 MyBatis-Plus 的Wrapper
或@Select
注解结合动态 SQL 实现:
java
@Select("""WITH temp_orders AS (SELECT * FROM orders WHERE create_time >= #{startTime})SELECT u.name, COUNT(*) FROM users u JOIN temp_orders o ON u.user_id = o.user_id GROUP BY u.name
""")
List<UserSales> getUserSalesByTime(String startTime);
五、CTE 使用最佳实践与注意事项
- 避免过度复杂的 CTE:每个 CTE 专注于一个逻辑模块,避免嵌套过多 CTE(建议不超过 3 层)。
- 合理选择物化或展开:对需要多次引用的 CTE,通过执行计划确认是否物化,必要时添加优化提示。
- 递归 CTE 的终止条件:确保递归 CTE 有明确的终止条件(如
WHERE
子句),避免无限循环(Oracle 会限制递归深度,默认 1000 层)。 - 兼容旧版本 Oracle:Oracle 12c 之前不支持
RECURSIVE
关键字,需使用传统递归语法(通过CONNECT BY
实现)。 - 与索引配合:若 CTE 依赖的表字段未加索引(如过滤条件
create_time
),先优化表索引,再使用 CTE。
六、总结
CTE 是 SQL 优化的重要工具,尤其在复杂查询场景中,通过拆解逻辑、复用中间结果、简化递归处理,既能提升代码可读性,又能借助数据库优化器提升性能。在 Oracle 中,结合索引优化、执行计划分析和合理的物化策略,CTE 可显著减少子查询重复计算,降低 IO 和 CPU 消耗。实际项目中,优先使用 CTE 替代多层嵌套子查询和临时表,同时注意根据数据量和业务场景选择合适的优化方案。
编辑
分享
结合案例详细介绍下WITH临时表的基本用法
如何在MyBatis-Plus中使用WITH临时表?
WITH临时表与传统临时表相比,有哪些优缺点?
相关文章:
WITH 临时表 SQL优化
在 SQL 优化中, 临时表(CTE,Common Table Expression,公共表表达式) 是一种强大的工具,它通过定义一个临时的结果集(可以理解为 “虚拟表”),让复杂查询更易读、更高效&a…...
Go语言中 defer 使用场景及深度注意事项指南
文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons:JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram,自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 ? 5 IDEA必装的插件&…...
第33周JavaSpringCloud微服务 面试题
一、项目面试 面试中介绍项目的方法 在面试过程中,若被问及相关项目,为提升通过几率,应着重介绍项目的功能点和架构升级内容。确保将项目的亮点讲透讲精彩,这对获取 offer 至关重要。 1. 项目架构 项目整体架构概述 项目整体…...
鸿蒙开发:Swiper轮播图
鸿蒙Swiper组件详解 一、Swiper组件概述 Swiper是鸿蒙(HarmonyOS)系统中提供的一个滑动容器组件,它允许用户通过手指滑动来切换子组件(通常是页面或图片),实现轮播图、引导页、图片浏览器等常见UI效果。 说明 该组件从API versi…...
Go语言之sync包 WaitGroup的使用和底层实现
在 Go 语言里,sync 包中的 WaitGroup 是一个实用工具,用于等待一组 goroutine 完成任务。其核心原理是通过内部维护一个计数器,该计数器初始值为 0,每启动一个新的 goroutine 就将计数器加 1,每个 goroutine 完成任务后…...
7N60-ASEMI无人机专用功率器件7N60
编辑:LL 7N60-ASEMI无人机专用功率器件7N60 型号:7N60 品牌:ASEMI 封装:TO-220F 最大漏源电流:7A 漏源击穿电压:600V 批号:最新 RDS(ON)Max:1.20Ω …...
SystemV-消息队列与责任链模式
一、SystemV 消息队列 1. 消息队列API Ftok 函数定义: key_t ftok(const char *pathname, int proj_id);函数作用: 获取唯一的key值标识符,用于标识系统V消息队列。参数解释: pathname:有效的文件路径(需…...
Ubuntu与Linux的关系
Linux 是一个 操作系统内核。它是一个类 Unix 系统,免费、开源,许多不同的操作系统(叫“发行版”)都是基于 Linux 内核构建的。 Ubuntu 是一个 基于 Linux 内核的操作系统发行版。它是目前最流行、最易用的 Linux 发行版之一&…...
同时支持windows和Linux的NFC读写器web插件
一个网站集成了NFC读写器的功能,如何才能跨系统运行呢,既要在windows系统下正常运行,也需要在银河麒麟,统信UOS等信创系统下运行。 友我科技NFC读写器web插件很好的解决了这个问题,在客户端不仅支持windows系统&#x…...
突破AI检测边界:对抗技术与学术伦理的终极博弈
随着GPT-4、Claude等大模型的文本生成能力突破人类写作水平,AI检测工具与对抗技术的博弈已进入白热化阶段。本文深入解析基于对抗训练的文本风格混淆网络如何突破GPTZero最新防御体系,探讨OpenAI多模态内容溯源系统引发的技术升级,并针对学术…...
pg数据库删除自建表空间
1. tbs_sjzx已经创建(略) pg数据库删除自己创建表空间;--查看表空间相关表 SELECT * FROM pg_tablespace; SELECT relname FROM pg_class WHERE reltablespace (SELECT oid FROM pg_tablespace WHERE spcname tbs_sjzx); SELECT * FROM pg_tables WHE…...
C++ 学习指南
new 关键字 #include <iostream> using namespace std;int* func() {// 在堆区创建int* p new int(10); return p; }void test01(void) {int *p func();cout << *p << endl;cout << *p << endl;cout << *p << endl;delete p;// 这…...
Scribe: 一个非常方便的操作文档编写工具
在日常生活中,当我们需要指导别人使用一个软件/web应用时,我们常常需要按流程对工具进行操作,走一遍主要功能,然后针对每一步进行截图,并附上操作说明。往往这样一套流程走下来,就会花费很长的时间。那么有…...
数据结构与算法-顺序表应用
一.通讯录的创建 首先我们要理解的是通讯录本身就是以顺序表为底层的 只不过顺序表中的数组,这里我们是用结构体来替代,用来存储用户的信息 由于是通讯录的本质就是顺序表,所以顺序表的任何方法它都能套用 Contact.h: #pragma once #def…...
DeepSeek系列(5):助力数据分析
数据解读与可视化建议 在数据驱动的商业环境中,有效解读数据并将其转化为直观可视化结果至关重要。DeepSeek作为强大的AI助手,可以帮助您从海量数据中提取洞见并提供专业的可视化建议。 DeepSeek在数据解读中的优势 DeepSeek可以通过以下方式帮助您更高效地解读数据: 上下…...
虚幻基础:动画k帧
文章目录 动画k帧:调整骨骼的变换达到自己想要的效果步骤打开动画原始文件选中骨骼调整到目标变换添加关键帧时间:自动添加到停留的那一帧数值:自动填写为调整后的数值 注释数值与骨骼细节面板上的数值并不对应,但是同样的效果为什…...
使用 LlamaIndex Workflows 与 Elasticsearch
作者:来自 Elastic Jeffrey Rengifo 在本文中,你将学习如何利用 LlamaIndex Workflows 与 Elasticsearch 快速构建一个使用 LLM 的自过滤搜索应用程序。 LlamaIndex Workflows 提出了一种不同的方式来处理将任务拆分给不同 agent 的问题,它引…...
相对论大师-记录型正负性质BFS/图论-链表/数据结构
看到这一题我的第一个思路就是双向bfs 起点是a,终点还是a,但是flag是相反的(“越”的方向) tip1.可以用字典vis来存储flag 刚开始初始化时vissta,visend一个对应0、1 要求两个队列相…...
代理设计模式:从底层原理到源代码的详细解释
代理设计模式(Proxy Pattern)是一种结构型设计模式,它通过创建一个代理对象来控制对目标对象的访问。代理对象充当客户端和目标对象之间的中介,允许在不修改目标对象的情况下添加额外的功能(如权限控制、日志记录、延迟…...
EasyRTC音视频实时通话:打造高清低延迟的远程会议新生态
一、项目背景 随着数字化办公的普及,远程会议成为企业、教育机构、政府部门等组织跨地域协作沟通的重要方式。传统远程会议系统在音视频质量、低延迟传输、多平台兼容性等方面存在不足,难以满足用户对高清、流畅、稳定会议体验的需求。EasyRTC作为一款…...
零基础上手Python数据分析 (21):图表选择困难症?常用可视化类型详解与应用场景指南
写在前面 —— 告别盲目绘图,理解图表语言,为你的数据找到最佳“代言人” 在前面几篇博客中,我们已经学习了使用 Matplotlib 和 Seaborn 这两大 Python 可视化利器来绘制各种图表。我们掌握了创建折线图、柱状图、散点图、箱线图等常用图表的技术。然而,仅仅知道 如何 绘…...
HarmonyOS Next 编译之如何使用多目标产物不同包名应用
引言 在日常的开发中涉及到多签名和多产物构建输出时手动切换签名文件和包名在开发中是容易出错且费时的一个操作,鸿蒙提供了自定义hvigor插件和多目标产物构建,那我们可以通过hvigor插件来动态修改不同项目配置所需要的代码,保证一套代码在…...
Oracle Database Resident Connection Pooling (DRCP) 白皮书阅读笔记
本文为“Extreme Oracle Database Connection Scalability with Database Resident Connection Pooling (DRCP)”的中文翻译加阅读笔记。觉得是重点的就用粗体表示了。 白皮书版本为March 2025, Version 3.3,副标题为:Optimizing Oracle Database resou…...
Sharding-JDBC 系列专题 - 第七篇:Spring Boot 集成与 Sharding-Proxy 简介
Sharding-JDBC 系列专题 - 第七篇:Spring Boot 集成与 Sharding-Proxy 简介 本系列专题旨在帮助开发者全面掌握 Sharding-JDBC,一个轻量级的分布式数据库中间件。本篇作为系列的第七篇文章,将重点探讨 Sharding-JDBC 与 Spring Boot 的集成,以及 Sharding-Proxy 的基本概念…...
day30 学习笔记
文章目录 前言一、凸包特征检测1.穷举法2.QuickHull法 二、图像轮廓特征查找1.外接矩形2.最小外接矩形3.最小外接圆 前言 通过今天的学习,我掌握了OpenCV中有关凸包特征检测,图像轮廓特征查找的相关原理和操作 一、凸包特征检测 通俗的讲,凸…...
变更管理 Change Management
以下是关于项目管理中 变更管理 的深度解析,结合高项(如软考高级信息系统项目管理师)教材内容,系统阐述变更管理的理论框架、流程方法及实战应用: 一、变更管理的基本概念 1. 定义 变更管理是对项目范围、进度、成本、质量等基准的修改进行系统性控制的过程,旨在确保变…...
PaddlePaddle线性回归详解:从模型定义到加载,掌握深度学习基础
目录 前言一、paddlepaddle框架的线性回归1.1 paddlepaddle模型的定义方式1.1.1 使用序列的方式 nn.Sequential 组网1.1.2 使用类的方式 class nn.Layer组网1.2 数据加载 1.3 paddlepaddle模型的保存1.3.1 基础API保存1.3.2 高级API模型的保存1.3.2.1 训练fit进行保存1.3.2.2 …...
几种Word转换PDF的常用方法
使用 Word 内置功能 步骤:打开需要转换的 Word 文档,点击左上角的 “文件” 菜单,选择 “另存为”,选择保存位置,在 “保存类型” 下拉菜单中选择 “PDF”,点击 “保存” 按钮即可。适用场景:适…...
【美化vim】
美化vim 涉及文件一个例子 涉及文件 ~/.vimrc修改这个文件即可 一个例子 let mapleader ,set number " 显示行号"set relativenumber " 显示相对行号set incsearch " 实时开启搜索高亮set hlsearch " 搜索结果高亮set autoinden…...
【git】subtree拆分大的git库到多个独立git库
【git】subtree拆分大的git库到多个独立git库 一、拆分一个子目录为独立仓库 # 这就是那个大仓库 big-project git clone gitgithub.com:tom/big-project.git cd big-project# 把所有 eiyo 目录下的相关提交整理为一个新的分支 eiyo_code git subtree split -P eiyo -b eiyo_…...
Elasticsearch 使用reindex进行数据同步或索引重构
1、批量复制优化 POST _reindex {"source": {"index": "source","size": 5000},"dest": {"index": "dest"} }2、提高scroll的并行度优化 POST _reindex?slices5&refresh {"source": {…...
JDBC对数据的增删改查操作:从Statement到PrepareStatement
目录 一 . Statement简介 二. 通过Statement添加数据 1. 创建表 2. 通过Statement添加数据 a. 获取连接 b. 获取Statement对象 c. 定义SQL语句 d. 执行SQL语句 e. 关闭资源 3. 通过Statement修改数据 4. 通过Statement删除数据 三. PreparedStatement的使用(重点) …...
智体OS上线智体管家:对话式智体应用商店访问
DTNS.OS 更新公告 - 智体管家功能发布 🌟 2024年4月22日重要更新:智体管家正式上线 智体管家是智体OS推出的全新功能,旨在让用户通过自然对话轻松发现和使用智体节点上的所有智体应用,相当于为智体网络打造了一个智能化的应用商…...
vscode flutter 插件, vscode运行安卓项目,.gradle 路径配置
Flutter Flutter Widget Snippets Awesome Flutter Snippets i dart-import Dart Data Class Generator Json to Dart Model Dart Getters And Setter GetX Snippets GetX Generator GetX Generator for Flutter flutter-img-syncvscode运行安卓项目,.gradle 路径配…...
dolphinscheduler实现(oracle-hdfs-doris)数据ETL
dolphinscheduler执行 完整脚本(自行替换相关变量)配置文件conf配置文件解析脚本转base64脚本 完整脚本(自行替换相关变量) user_olsh conf/getInfo.sh Oracle user conf/databases.conf password_olsh conf/getInfo.sh Oracle password conf/databases.conf dblink_olsh conf…...
ViewBS 的工作流程
ViewBS ViewBS 的工作流程 ViewBS 提供多个顶级命令,用于确定所需和最优参数。这些命令可分为两部分:甲基化报告和功能区域的数据可视化。 在甲基化报告部分中,提供多个顶级命令,可以生成关于读取覆盖度、甲基化水平分布、全局甲基化水平等报告。 在功能区域可视化部分…...
qt调用deepseek的API开发(附带源码)
今天讲的是使用qt做一个界面(负责接受deepseek返回的数据和客户发送数据的端口)会用流的方式接受数据提高用户体验 测试效果源码流程配置deepseek调用思路deepseek与qt联合开发界面思路 上一篇文章用的不是流开发,会让客户等待很久࿰…...
java中值传递的含义
Java 中的值传递(Pass by Value)详解 在 Java 中,所有参数的传递都是值传递(Pass by Value),但根据传递的数据类型不同(基本类型 vs 引用类型),表现行为会有所不同。 1.…...
【自然语言处理与大模型】如何知道自己部署的模型的最大并行访问数呢?
当你自己在服务器上部署好一个模型后,使用场景会有两种。第一种就是你自己去玩,结合自有的数据做RAG等等,这种情况下一般是不会考虑并发的问题。第二种是将部署好的服务给到别人来使用,这时候就必须知道我的服务到底支持多大的访问…...
基于PHP+MySQL实现(Web)单词助手网站
WordHelper 这是一个学习 PHP 的时候依照课程设计的要求,做的一个简单的单词助手。 系统通过 CDN 引入 Vue.js 和 ElementUI,并用 PHP 搭建了一个十分十分简易的后台。 一、设计要求 1、词汇录入与编辑。提供接口让用户录入英文单词、词义、发音、词…...
Java面试实战:谢飞机的求职记 - Spring Boot、Redis与微服务技术问答解析
场景描述 谢飞机,一位自称为“Java全栈大师”的程序员,参加了某互联网大厂的Java开发岗位面试。面试官严肃而专业,针对Spring Boot、Redis缓存以及微服务架构等核心技术展开提问。以下是谢飞机在面试中的表现。 第一轮提问(基础篇…...
【数字图像处理】立体视觉信息提取
双目立体视觉原理 设一个为参考平面,一个为目标平面。增加了一个摄像头后,P与Q在目标面T上有分别的成像点 双目立体视觉:从两个不同的位置观察同一物体,用三角测量原理计算摄像机到该物体的距离的 方法 原理:三角测量…...
解析芯片低功耗设计的底层逻辑与实现方法
芯片低功耗设计的必要性可以从实际需求和技术优化两方面来探讨: 从需求角度看,工艺进步和应用场景共同驱动低功耗设计。 随着CMOS制程持续微缩,晶体管密度和时钟频率提升导致静态功耗显著增加,漏电流问题在先进工艺中尤为明显。…...
uniapp开发2--uniapp中的条件编译总结
以下是对 uni-app 中条件编译的总结: 概念: 条件编译是一种技术,允许你根据不同的平台或环境,编译不同的代码。 在 uni-app 中,这意味着你可以编写一套代码,然后根据要编译到的平台(例如微信小…...
Netty 异步机制深度解析:Future 与 Promise 的前世今生
引言:异步编程的「糖」与「痛」 在高性能网络编程中,「异步」几乎是必备的设计模式,异步的好处就是可以提升系统吞吐量,提升效率。但很多开发者初入 Netty 时,对它的异步机制总有点模糊: 为什么 ChannelF…...
如何查看MySql主从同步的偏移量
1.Mysql的主从同步方案 mysql为了在实现读写分离,主库写,从库读 mysql的同步方案主要是通过从库读取主库的binlog日志的方式。 binlog就是一个记录mysql的操作的日志记录,从库通过拿到主库的binlog知道主库进行了哪些操作,然后在从…...
短信验证码安全实战:三网API+多语言适配开发指南
在短信服务中,创建自定义签名是发送通知、验证信息和其他类型消息的重要步骤。万维易源提供的“三网短信验证码”API为开发者和企业提供了高效、便捷的自定义签名创建服务,可以通过简单的接口调用提交签名给运营商审核。本文将详细介绍如何使用该API&…...
护眼-科学使用显示器
一 显示色温对眼睛的影响 显示器的色温设置对护眼效果至关重要,合适的色温可减少蓝光伤害并缓解视疲劳。最护眼的色温并非固定值,需根据环境光、使用时间和场景动态调整。白天推荐6500K左右,夜晚降至3000K-4000K,并借助自动调节工…...
HarmonyOS:1.7
判断题 1.订阅网络状态变化事件时,通过NetConnection类型的对象调用on方法,传入具体事件类型即可: 错误(False) 2.若使用HTTP发起一个GET请求,直接调用get方法,传入请求资源的URL,即可发起请求ÿ…...
物联网赋能玻璃制造业:实现设备智能管理与生产协同
在当今数字化时代,物联网技术正深刻改变着传统制造业的发展模式,玻璃制造业也不例外。物联网的赋能,为玻璃制造业带来了设备智能管理与生产协同的新机遇,推动其向智能化、高效化迈进。 在设备智能管理方面,物联网通过…...