MySQL数据库——常见慢查询优化方式
本文详细介绍MySQL的慢查询相关概念,分析步骤及其优化方案等。
文章目录
- 什么是慢查询日志?
- 慢查询日志的相关参数
- 如何启用慢查询日志?
- 方式一:修改配置文件
- 方式二:通过命令动态启用
- 分析慢查询日志
- 方式一:直接查看日志文件
- 方式二:使用`EXPLAIN`分析查询
- 常见的慢查询优化
- 1. 数据类型优化
- 2. 索引优化
- 3. SQL 查询优化
- 4. 分库分表
- 慢查询日志的适用场景
- 慢查询日志的优缺点
- 总结
什么是慢查询日志?
慢查询日志是MySQL提供的一种日志记录机制,用于记录执行时间超过指定阈值(long_query_time
)的SQL语句。通过慢查询日志,可以识别和优化性能较差的SQL查询,是数据库性能调优的重要工具。
- 关键点:
- 默认阈值:
long_query_time
默认值为 10秒,表示运行时间超过10秒的SQL会被记录。 - 默认状态:MySQL 默认未开启慢查询日志,需要手动启用。
- 日志存储方式:支持存储为文件或表。
- 默认阈值:
慢查询日志的相关参数
MySQL慢查询日志的核心参数及其含义如下:
-
启用和路径配置:
slow_query_log
:是否开启慢查询日志,1
表示开启,0
表示关闭。slow-query-log-file
:日志文件路径和名称(MySQL 5.6及以上版本)。log-slow-queries
:旧版(MySQL 5.6以下)的日志存储路径参数。
-
时间阈值:
long_query_time
:慢查询的时间阈值,单位是秒。运行时间超过该阈值的查询将被记录到慢查询日志中。
-
其他参数:
log_queries_not_using_indexes
:未使用索引的查询也会记录到慢查询日志中,帮助识别潜在的索引问题(可选)。log_output
:定义日志的存储方式:'FILE'
:将日志写入文件(默认)。'TABLE'
:将日志记录到mysql.slow_log
表中。'FILE,TABLE'
:同时使用文件和表存储。
如何启用慢查询日志?
方式一:修改配置文件
- 打开 MySQL 配置文件(
my.cnf
或my.ini
)。 - 添加以下配置:
slow_query_log = 1 slow_query_log_file = /path/to/mysql-slow.log long_query_time = 2 log_queries_not_using_indexes = 1 log_output = 'FILE'
- 重启 MySQL 服务以生效。
方式二:通过命令动态启用
使用 MySQL 提供的全局变量来开启慢查询日志:
SET GLOBAL slow_query_log = ON;
SET GLOBAL long_query_time = 2;
SET GLOBAL log_queries_not_using_indexes = 1;
SET GLOBAL log_output = 'FILE';
注意:动态配置的参数在重启后失效,需将参数写入配置文件以持久化。
分析慢查询日志
方式一:直接查看日志文件
慢查询日志文件以文本格式存储,可以使用 cat
、tail
或日志分析工具查看。
方式二:使用EXPLAIN
分析查询
EXPLAIN
命令用于模拟优化器的查询执行计划,帮助分析SQL语句的性能问题。
例如:
EXPLAIN SELECT * FROM res_user ORDER BY modifiedtime LIMIT 0,1000;
-
EXPLAIN列说明:
table
:查询涉及的表。type
:访问类型,从高到低依次为:const
、eq_ref
、ref
、range
、index
、ALL
。rows
:预计扫描的行数。key
:使用的索引。Extra
:补充信息,比如是否使用了临时表或文件排序。
-
type
的类型和效率:ALL
:全表扫描,效率最低。index
:全索引扫描。range
:索引范围扫描。ref
:非唯一索引扫描或唯一索引前缀扫描。eq_ref
:唯一索引扫描,效率较高。const/system
:常量查询,效率最高。
常见的慢查询优化
优化 MySQL 的慢查询是提升数据库性能的关键环节。以下是常见的慢查询优化方法,按步骤和具体技术进行详细介绍:
1. 数据类型优化
- 使用占用空间更小的字段类型:
- 优先使用
TINYINT
、SMALLINT
,而非INT
。 - 固定长度的字符串使用
CHAR
,而非VARCHAR
。 - 使用
TIMESTAMP
而非DATETIME
,减少存储空间。TIMESTAMP
占用 4 字节,而DATETIME
占用 8 字节。TIMESTAMP
的时间范围为 1970-2038,而DATETIME
为 1000-9999,TIMESTAMP
更节省空间并且在 UTC 时间格式下自动处理时区转换。
- 精度要求较高时使用
DECIMAL
或BIGINT
:- 如果需要精确的数字存储,特别是涉及到小数的场景,使用
DECIMAL
类型而非FLOAT
或DOUBLE
。例如,对于要求两位小数的金额字段,可以将值乘以 100 保存为BIGINT
。
- 如果需要精确的数字存储,特别是涉及到小数的场景,使用
- 优先使用
2. 索引优化
索引是优化慢查询最常见和高效的方法。以下是索引优化的几种方式:
-
创建适合的索引:
- 对
WHERE
子句中频繁使用的列建立索引。 - 对
GROUP BY
、ORDER BY
和JOIN
操作中涉及的列建立索引。
CREATE INDEX idx_column_name ON table_name(column_name);
- 对
-
联合索引:
如果查询中涉及多个条件,可以创建联合索引。注意最左前缀原则。CREATE INDEX idx_multi_columns ON table_name(column1, column2);
-
覆盖索引:
通过索引覆盖查询的所有字段,减少回表操作。SELECT col1, col2 FROM table_name WHERE col1 = 1;
-
避免冗余索引:
合理设计索引,避免不必要的重复索引。例如(a, b)
的索引已经可以覆盖a
的查询,没必要再单独为a
创建索引。
3. SQL 查询优化
优化 SQL 查询语句本身是提高性能的重要手段。
-
避免
SELECT *
:
只查询必要的字段,减少数据传输量。SELECT col1, col2 FROM table_name WHERE condition;
-
避免子查询,改用 JOIN:
子查询在某些情况下会导致性能下降,特别是嵌套子查询。-- 子查询 SELECT * FROM table_name WHERE col1 IN (SELECT col1 FROM other_table);-- 改为 JOIN SELECT t1.* FROM table_name t1 JOIN other_table t2 ON t1.col1 = t2.col1;
-
合理使用 LIMIT:
对分页查询,尽量使用LIMIT + 游标(id > n)
的方法,减少使用LIMIT + OFFSET
的方式,尤其是当 偏移量(OFFSET)非常大时。LIMIT + OFFSET
的性能瓶颈:- 数据库需要从头开始扫描,跳过
OFFSET
指定的记录。 - 偏移量越大,查询耗时越长。
- 即使只返回少量数据,数据库仍需加载并跳过大量无关记录。
示例:-- 查询第 1000000 页,每页 10 条记录 SELECT * FROM orders ORDER BY id DESC LIMIT 1000000, 10;
- 数据库会先找到前 1000000 条记录,跳过它们,然后再返回第 1000000 条后的 10 条记录。
- 随着 OFFSET 增大,性能会急剧下降。
优化方案:使用
LIMIT + 游标(id > n)
:-
通过游标条件
id > n
,可以直接定位到需要的记录,避免跳过大量无关记录。示例:
假设表orders
中的主键是id
,查询从第 1000000 条开始的 10 条记录:-- 优化后的查询 SELECT * FROM orders WHERE id > 1000000 ORDER BY id ASC LIMIT 10;
- 通过
id > 1000000
确定游标位置,直接从符合条件的记录开始扫描。 - 查询性能与
OFFSET
无关,扫描范围大大缩小。
- 通过
- 数据库需要从头开始扫描,跳过
-
避免函数操作:
不要在WHERE
子句中对列使用函数,会导致索引失效。SELECT * FROM table_name WHERE DATE(column_name) = '2023-01-01'; -- 慢SELECT * FROM table_name WHERE column_name >= '2023-01-01' AND column_name < '2023-01-02'; -- 快
-
减少
OR
的使用:
OR
通常会导致全表扫描,可以用UNION
或IN
代替。-- 原始查询:使用 OR,可能导致全表扫描 SELECT * FROM table_name WHERE col1 = 1 OR col1 = 2;-- 优化方式 1:使用 IN,能够高效利用单列索引 SELECT * FROM table_name WHERE col1 IN (1, 2);-- 优化方式 2:使用 UNION,将查询拆分成两个独立的部分 (SELECT * FROM table_name WHERE col1 = 1) UNION (SELECT * FROM table_name WHERE col1 = 2);
-
优化
LIKE
查询:
LIKE
查询如果以%
开头会导致全表扫描,因为无法使用索引。可以优化为前缀匹配或使用全文索引。示例:
-- 非优化:前缀为 %,无法使用索引 SELECT * FROM table_name WHERE col1 LIKE '%keyword%';-- 优化:前缀匹配,能够使用索引 SELECT * FROM table_name WHERE col1 LIKE 'keyword%';-- 使用全文索引(适用于大文本字段) ALTER TABLE table_name ADD FULLTEXT(col1); SELECT * FROM table_name WHERE MATCH(col1) AGAINST('keyword');
4. 分库分表
分库分表是一种应对大规模数据存储和高并发访问的解决方案。
-
何时分库分表:
根据《阿里巴巴 Java 开发手册》的建议,单表行数超过 500 万行或单表容量超过 2GB 时,考虑分库分表。 -
分库分表的好处:
- 提升查询效率:通过拆分单表或数据库,将数据分散到多个存储节点上,减少单节点的存储和查询压力。
- 提升并发性能:多个节点可以同时处理查询或写入操作,分担压力。
- 减少锁冲突:分库分表后,每个表的并发操作减少,减少锁等待和冲突。
-
分库分表的方式:
-
垂直拆分(按功能分库):
按业务模块划分数据库,将不同的业务表存储在不同的库中。库1:用户数据(users, profiles) 库2:订单数据(orders, order_items) 库3:商品数据(products, categories)
-
水平拆分(按数据分片分库分表):
将单表数据按照一定规则(如用户 ID、订单 ID 等)拆分到多个表或库中。- 范围分片:根据 ID 范围分配数据。
orders_0: ID 1-10000 orders_1: ID 10001-20000
- 哈希分片:对分片键取模,将数据分散到多个库或表中。
-- 按订单 ID 取模分表 SELECT * FROM orders_hash WHERE MOD(order_id, 4) = 0;
- 范围分片:根据 ID 范围分配数据。
-
-
分库分表的注意事项:
- 尽量在当前架构下优化数据库性能,例如升级硬件、迁移历史数据。
- 分片键的选择要能有效分散数据,同时能支持大部分查询需求。
- 使用分布式中间件(如 ShardingSphere、MyCAT)来管理分库分表后的复杂性。
慢查询日志的适用场景
- 数据库性能调优
- 找出执行较慢的查询,优化索引设计或SQL语句。
- 排查系统瓶颈
- 通过
log_queries_not_using_indexes
找出未使用索引的查询,优化数据访问路径。
- 通过
- 数据模型优化
- 分析慢查询日志,可以评估表设计、字段类型是否合理。
慢查询日志的优缺点
-
优点:
- 帮助识别性能瓶颈。
- 提供查询优化的方向。
- 支持将日志存储为表,便于后续分析。
-
缺点:
- 开启后可能对性能产生一定影响,尤其是高并发场景。
- 日志文件可能过大,需要定期清理。
总结
慢查询日志是性能调优的重要工具,通过合理的日志配置和日志分析,可以有效发现并优化SQL查询性能问题。然而,在高并发环境下,应根据需求合理开启并定期清理日志,避免对数据库性能造成额外负担。
相关文章:
MySQL数据库——常见慢查询优化方式
本文详细介绍MySQL的慢查询相关概念,分析步骤及其优化方案等。 文章目录 什么是慢查询日志?慢查询日志的相关参数如何启用慢查询日志?方式一:修改配置文件方式二:通过命令动态启用 分析慢查询日志方式一:直…...
【NX入门篇】
NX入门篇 一、UG NX 由来二、软件如何启动(UG NX 12.0)三、使用步骤四、常用命令 一、UG NX 由来 UG NX由来: 1969 年:UG 的开发始于美国麦道航空公司,基于 C 语言开发实现;1976 年:UG问世&am…...
卡码网 ACM答题编程模板
背景: input() 在 ACM 编程中的底层调用原理 1. input() 的核心原理 在 Python 中,input() 的底层实现依赖于标准输入流 sys.stdin。每次调用 input() 时,Python 会从 sys.stdin 中读取一行字符串,直到遇到换行符 \n 或文件结束…...
vue代理问题
vue代理问题 场景:前后端分离项目问题,在前端中请求接口,返回数据这个过程,但是在这个过程中,前端会有两个环境,一个是开发环境,一个是生产环境. 在开发环境中请求接口可能会遇到跨域问题,比如请求的端口是3000,当前端口是8080,这时候就会遇到跨域问题,或者ip不同,也会存在跨…...
软考 高级 架构师 第十 章软件工程3
1.系统测试 系统测试是为了发现错误而执行程序的过程,成功的测试是发现了至今尚未被发现的错误的测试。 测试原则: 1)应尽早并不断的进行测试 2)测试工作应避免由原开发软件的人或小组承担 3)在 设计测试方案时&#…...
GoF23种设计模式 简介
文章目录 面向对象(OO)设计原则(7)单一职责原则开闭原则里氏代换原则依赖倒转原则接口隔离原则合成复用原则迪米特法则 创建型模式 (5)工厂方法模式 (类模式,其余都是对象模式)抽象工厂模式建造…...
【FlutterDart】页面切换 PageView PageController(9 /100)
上效果: 有些不能理解官方例子里的动画为什么没有效果,有可能是我写法不对 后续如果有动画效果修复了,再更新这篇,没有动画效果,总觉得感受的丝滑效果差了很多 上代码: import package:flutter/material.…...
旧服务改造及微服务架构演进
旧服务改造及微服务架构演进 微服务架构演进1.微服务架构2.微服务架构的特点3.单体架构与微服务架构之间的对比4.微服务架构演进历程 旧服务改造1. 微服务拆分的一些通用原则2.微服务拆分策略(1)功能维度拆分策略(2)非功能维度拆分…...
数据结构复习 (顺序查找,对半查找,斐波那契查找,插值查找,分块查找)
查找(检索): 定义:从给定的数据中找到对应的K 1,顺序查找: O(n)的从前向后的遍历 2,对半查找,要求有序 从中间开始查找,每次检查中间的是否正确,不正确就…...
根据docker file 编译镜像
比如给到一个Dockerfile 第一步编译镜像 cd /path/to/Dockerfiledocker build -t <DOCKER_IMAGE_NAME> . build 命令编译镜像 -t 镜像名字 . 指dockerfile 所在目录 如果遇到报错 [] Building 0.3s (3/3) FINISHED …...
C语言:调试的概念和调试器的选择
所谓调试(Dubug),就是跟踪程序的运行过程,从而发现程序的逻辑错误(思路错误),或者隐藏的缺陷(Bug)。 在调试的过程中,我们可以监控程序的每一个细节ÿ…...
Vulnhub靶场(Earth)
项目地址 https://download.vulnhub.com/theplanets/Earth.ova.torrent 搭建靶机 官网下载.ova文件双击vm打开导入 获取靶机IP kail终端输入 arp-scan -l 获取靶机 IP 192.168.131.184 信息收集 端口扫描 sudo nmap -sC -sV -p- 192.168.131.184 可以看到开启22端口&…...
rsync命令常用同步方案
rsync是一个高效的文件同步工具,广泛应用于本地和远程备份、镜像及同步任务。它通过增量同步、压缩传输以及远程协议(如SSH)等技术,显著提高了文件传输的效率。本文将介绍rsync命令的常用参数、工作原理、常见同步方案,…...
【Ubuntu】 Ubuntu22.04搭建NFS服务
安装NFS服务端 sudo apt install nfs-kernel-server 安装NFS客户端 sudo apt install nfs-common 配置/etc/exports sudo vim /etc/exports 第一个字段:/home/lm/code/nfswork共享的目录 第二个字段:指定哪些用户可以访问 * 表示所有用户都可以访…...
Python自学 - 递归函数
1 Python自学 - 递归函数 递归函数是一种在函数体内调用自己的函数,就像“左脚踩着右脚,再右脚踩着左脚… 嗯,你就可以上天了!”。递归函数虽然不能上天,但在处理某些场景时非常好用, 一种典型的场景就是遍…...
后端开发入门超完整速成路线(算法篇)
引言 后端开发是软件开发中不可或缺的一部分,它涉及到服务器、数据库、API等核心组件的构建和维护。对于初学者来说,掌握算法和数据结构是进入后端开发领域的基础。本文将为你提供一个超完整的算法学习路线,帮助你快速入门,并在文…...
51单片机——共阴数码管实验
数码管中有8位数字,从右往左分别为LED1、LED2、...、LED8,如下图所示 如何实现点亮单个数字,用下图中的ABC来实现 P2.2管脚控制A,P2.3管脚控制B,P2.4管脚控制C //定义数码管位选管脚 sbit LSAP2^2; sbit LSBP2^3; s…...
使用Clion在ubuntu上进行交叉编译,并在Linux上远程编译五子棋
目录 1.工具以及概念介绍 (1)Clion软件简介 (2)交叉编译 (3)远程编译 2.操作原理 3.详细操作步骤 (1)配置Clion与虚拟机ubuntu的ssh连接 CLion远程开发Ubuntu,并显…...
高并发写利器-组提交,我的Spring组件实战
高并发写优化理论 对于高并发的读QPS优化手段较多,最经济简单的方式是上缓存。但是对于高并发写TPS该如何提升?业界常用的有分库分表、异步写入等技术手段。但是分库分表对于业务的改造十分巨大,涉及迁移数据的麻烦工作,不会作为…...
Stable Diffusion的简单介绍
Stable Diffusion 是一款免费、开源的 AI 图像生成器,由 Stability AI 公司于 2022 年 8 月推出1。以下是关于它的详细介绍: 目录 工作原理 特点 应用场景 主要版本 工作原理 Stable Diffusion 属于潜在扩散模型,主要由三部分组成&…...
R语言的数据结构
R语言的数据结构 R语言是专门为统计计算和数据分析而设计的一种编程语言,因其强大的数据处理能力而受到广泛欢迎。在R中,数据结构是理解和有效使用R语言的基础。本文将详细介绍R语言中的主要数据结构,包括向量、矩阵、数据框、列表、因子等&…...
go项目zero框架中用gentool解决指定MYSQL表生成结构体被覆盖的解决方案
在使用 GoZero 框架进行项目开发时,gentool 是一个非常方便的工具,它可以根据数据库表结构自动生成 Go 语言结构体和其他相关文件。然而,在使用 gentool 生成结构体时,可能会遇到一个问题:如果多次运行 gentool&#x…...
限时特惠,香港服务器,低至53元/年
家人们谁懂啊!香港服务器这价格简直逆天了,居然比内地的还便宜!就拿阿里云来说,人家最低配置的服务器,价格都很难做到这么亲民。 最低配的就不说了,2 核 4G 的配置,应对日常业务稳稳当当&#x…...
【GUI-pyqt5】QObject类
1. QObject模块详解 1.1 描述 所有Qt对象的父类 1.2 功能和作用 1.2.1 对象名称和属性 1.2.1.1 API API功能备注 setObjectName("唯一名称") 给一个Qt对象设置一个名称 一般这个名称是唯一的,当做对象ID来使用 objectName() 获取一个对象名称 - set…...
第2章:SQL基础
第2章:SQL基础 2.1 SQL语言介绍 2.1.1 SQL发展历史 SQL的起源SQL标准的演变不同数据库的SQL实现 2.1.2 SQL语言分类 数据定义语言 (DDL):用于定义和修改数据库的结构,包括数据库、表、索引、视图等对象的创建、修改和删除。数据操作语言 (DML):用于…...
Azkaban其一,介绍、体系架构和安装
目录 一、简介 二、Azkaban的体系结构 三、Azkaban的安装步骤 1、上传,解压 2、生成mysql的元数据 3、配置web-server 4、配置exec-server 5、修改所有的.sh 的执行权限 一、简介 遇到了什么问题才会使用Azkaban ?比如: 想启动hadoop集群先启动…...
Seata 使用教程:全面解锁分布式事务管理
Seata 使用教程:全面解锁分布式事务管理 在当今分布式系统蓬勃发展的时代,微服务架构被广泛应用,随之而来的是分布式事务管理的难题。Seata 作为一款开源的分布式事务解决方案,为保障分布式系统的数据一致性提供了强有力的支持。本文将详细讲解 Seata 的使用方法,深入剖析…...
《learn_the_architecture_-_aarch64_exception_model》学习笔记
1.当发生异常时,异常级别可以增加或保持不变,永远无法通过异常来转移到较低的权限级别。从异常返回时,异常级别可能会降低或保持不变,永远无法通过从异常返回来移动到更高的权限级别。EL0级不进行异常处理,异常必须在比…...
密码学原理技术-第十一章-Hash Functions
文章目录 总结Why we need hash functionsDigital Signature with a Hash FunctionBasic Protocol for Digital Signatures with a Hash FunctionPrincipal input–output behavior of hash functions Security propertiesThe three security requirements of hash functionsWh…...
Golang 入门基础知识
快速入门 go 语言笔记,参考了各种大佬的 blog 。 一、下载安装 国内站点 :https://golang.google.cn IDE : Goland (2020.12月以后破解有些困难 见 zhile.io, 无法试用的话可以搜一个注册码,失效的也可以&…...
SQL把字符串按逗号分割成记录
在 SQL 中,可以通过以下方法将字符串按逗号分割,并将每个分割的值作为单独的记录插入到结果集中。以下是针对不同数据库系统的实现方法: 1. 使用 STRING_SPLIT(SQL Server 2016) STRING_SPLIT 是 SQL Server 提供的内置…...
HTML——26.像素单位
<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>像素</title></head><body><!--像素:1.指设备屏幕上的一个点,单位px,如led屏上的小灯朱2.当屏幕分辨率固定时&…...
TIM的输出比较(PWM)
OC(Output Compare)输出比较 输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形 每个高级定时器和通用定时器都拥有4个输出比较通道 初始化 1.开启RCC RCC_…...
李宏毅机器学习笔记-Transformer
目录 1. Seq2seq 2. encoder Transformer 中的 Block 结构 3. Decoder 4.Encoder和Decoder间的信息传递 5.Training 6.Tips 1. Seq2seq Transformer 是一个seq2seq的model。Seq2seq指的是input是一个序列,输出也是一个序列,输出的长度是由机器自己…...
【机器学习:三、常见的代价函数】
代价函数的选择与任务类型(回归、分类等)以及模型的具体目标密切相关。 回归任务中的代价函数 均方误差(Mean Squared Error, MSE) 公式: J ( θ ) 1 m ∑ i 1 m ( y i − y ^ i ) 2 J(\theta)\frac{1}{m}\sum_{i1}^m(y_i-\…...
React 数据是怎样传递的
写在前面 在 React 应用程序中,数据传递是非常重要的。它允许我们在组件之间共享信息和状态,从而构建出复杂的用户界面。本文将深入探讨 React 中的数据传递机制,包括 props、state 和 context API。我们还将通过实际例子来演示如何在项目中…...
Python入门教程 —— 高阶函数和装饰器
1.递归函数 什么是递归函数 如果一个函数在内部不调用其它的函数,而是自己本身的话,这个函数就是递归函数。 递归函数的作用 举个例子,我们来计算阶乘 n! = 1 * 2 * 3 * ... * n 解决办法1:使用循环来完成 def cal(num):result,i = 1,1while i <= num:result *= ii…...
RSA密码的安全性分析(简化版本)
RSA的安全性是基于分解大整数的困难性假定,之所以认为是假定是因为至今还未能证明大整数就是NP问题,也许有尚未发现的多项式时间分解算法。随着人类计算能力的不断提高,原来被认为是不可能分解的大数已经被成功分解。对于大整数的威胁除了人类…...
解决Vue中设置el-select的高度不生效问题
el-select是Element UI框架中的一个选择器组件,它允许用户从多个选项中选择一个或多个项目。但这里确存在一个小坑,我们可以看到直接修改el-select的高度是无法生效的 <template><div id"login"><el-select v-model"role…...
解决openpyxl操纵带公式的excel或者csv之后,pandas无法读取数值的问题
1 功能特点 openpyxl: 这是一个专门用于操作Excel文件(.xlsx/.xlsm)的库。它提供了丰富的功能来读取、写入和修改Excel文件的各个元素,如单元格、行、列、工作表等。例如,可以通过openpyxl轻松地创建一个新的Excel工作…...
高等数学学习笔记 ☞ 无穷小比较与等价无穷小替换
1. 无穷小比较 1. 本质:就是函数的极限趋于0时的速度,谁快谁慢的问题。 2. 定义:若是在同一自变量的变化过程中的无穷小,且,则: ①:若,则称是比的高阶无穷小,记作&…...
计算队列中的‘捣乱分子’对数:一种量化无序程度的方法
计算队列中的‘捣乱分子’对数:一种量化无序程度的方法 前言解题思路关键点实现代码时间复杂度分析前言 在日常生活中,我们经常会遇到需要排队的场景,比如买票、候车、就餐等。在理想的排队情况下,人们会按照某种顺序(如先到先服务)整齐地排成一列。然而,总有一些人不遵…...
如何在不丢失数据的情况下从 IOS 14 回滚到 IOS 13
您是否后悔在 iPhone、iPad 或 iPod touch 上安装 iOS 14?如果你这样做,你并不孤单。许多升级到 iOS 14 beta 的 iPhone、iPad 和 iPod touch 用户不再适应它。 如果您在正式发布日期之前升级到 iOS 14 以享受其功能,但您不再适应 iOS 14&am…...
提升汽车金融租赁系统的效率与风险管理策略探讨
内容概要 在汽车金融租赁系统这个复杂的生态中,提升整体效率是每个企业都渴望达成的目标。首先,优化业务流程是实现高效运行的基础。通过分析目前的流程,找出冗余环节并进行简化,能够帮助企业缩短审批时间,提高客户满…...
Git 入门(一)
git 工作流如下: 命令如下: clone(克隆): 从远程仓库中克隆代码到本地仓库checkout (检出):从本地仓库中检出一个仓库分支然后进行修订add(添加): 在提交前先将代码提交到暂存区com…...
pyinstaller冻结打包多进程程序的bug:无限创建进程直至系统崩溃
前面写过两篇相关的文章: PyQt应用程序打包Python自动按键 这两篇文章都没有提到下面的这个重要问题: 采用Pyinstaller冻结打包多进程程序时,必须非常小心。这个技术线在Windows上会有一个非常严重的Bug。直接运行打包后的程序会造成无限创…...
OSI模型的网络层中产生拥塞的主要原因?
( 1 )缓冲区容量有限;( 1.5 分) ( 2 )传输线路的带宽有限;( 1.5 分) ( 3 )网络结点的处理能力有限;( 1 分…...
服务器开发 的设计模式(Design Patterns)核心知识
服务器开发的设计模式(Design Patterns)核心知识 在现代软件开发中,设计模式是一组为解决特定问题而重用的解决方案。它们是经过时间考验的最佳实践,为开发人员提供了一种有效的解决方案来应对常见的软件设计问题。特别是在服务器…...
智能工厂的设计软件 应用场景的一个例子: 为AI聊天工具添加一个知识系统 之20 再次重建 之5 项目文件三大部 整“拼”项目文档总述
本文要点 ]本项目的项目文件中的三个Part终于“拼”出来的(个别用词可能还需斟酌,但样子、格式和意思 差不多): Part1【凡间-AI众生】 人性化&去中心化-个体人生观 语言有关(语言交流-经验常识实践 信条 行为主义 随机数-本质偶然的 想…...
Lucas-Kanade光流法详解
简介:个人学习分享,如有错误,欢迎批评指正。 光流(Optical Flow)描述的是图像序列中各像素点随时间的运动情况,是计算机视觉中的基本问题之一。光流问题涉及尝试找出一幅图像中的许多点在第二幅图像中移动的…...