avatar
文章
105
标签
28
分类
24

主页
文章
标签
分类
TranquilXuan
搜索
主页
文章
标签
分类

TranquilXuan

MySQL 8.0窗口函数实战:解决TopN与排名问题
发表于2026-08-04|数据库后端|MySQL•窗口函数•性能优化•实战
MySQL 8.0窗口函数实战:解决TopN与排名问题业务开发中经常遇到排名、分组 TopN 需求:用户积分排行榜、各部门薪资前三的员工、最近 N 个月的销售滚动统计……MySQL 8.0 引入的窗口函数让你用一条 SQL 就能干净利落地完成这些操作,不需要再写晦涩的自连接或用户变量。 本文通过用户积分排名和部门薪资 Top3 两个生产级场景,给出可直接运行的示例,并对比传统 GROUP BY + 子查询 方案的性能差异,帮助你在项目中快速落地窗口函数。 1. 环境准备123456789101112131415161718192021222324252627-- 验证环境:MySQL 8.0.35,InnoDB引擎CREATE TABLE users ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL, points INT NOT NULL DEFAULT 0) ENGINE=InnoDB;INSERT INTO users (name, points) VALUES('Alice ...
MySQL死锁问题排查与解决方案实战
发表于2026-08-03|后端数据库|MySQL•Deadlock•性能调优
MySQL死锁问题排查与解决方案实战 真实场景:支付系统进行一笔退款操作时,后台日志赫然出现 Deadlock found when trying to get lock; try restarting transaction。退款失败,订单状态卡住,客服电话被打爆。作为后端开发,你能否快速定位死锁并拿出高可用方案?本文将通过 3 个完整可运行的案例,带你从死锁“现象”走到“根因”,再到“代码级修复”,并给出可落地的预防策略。 一、死锁是怎么发生的?在 MySQL InnoDB 引擎中,死锁是并发事务相互持有对方需要的锁,形成循环等待而无法继续执行的僵局。要打破死锁,必须先理解 InnoDB 的锁机制。 发生死锁的四个必要条件(缺一不可): 互斥:资源只能被一个事务独占。 持有并等待:事务已持有一部分锁,同时在等待其他锁。 不可抢占:已获取的锁不能被外界强制释放。 循环等待:事务间形成首尾相连的等待环。 InnoDB 会自动检测死锁,并选择回滚代价最小的事务(undo log 较小的那个)来打破死锁,同时将死锁信息记录到 SHOW ENGINE INNODB STATUS 中。 ...
MySQL深分页查询性能优化实战
发表于2026-08-03|后端数据库|MySQL•性能优化•数据库
MySQL深分页查询性能优化实战想象一个场景:订单表里有上百万条数据,业务需要按创建时间倒序分页展示。前几页秒出,翻到第 1000 页时,SQL 却卡了 5 秒。这就是典型的深分页问题——当 OFFSET 变大时,查询性能急剧下降。 本文从真实业务场景出发,用可复现的示例带你定位问题,再给出 3 种实用的优化方案,所有 SQL 都能直接在你本地 MySQL 8.0 上运行。 1. 复现问题:200 万订单的深分页1.1 建表与造数据1234567891011121314151617181920212223242526272829303132-- 订单表,自增主键 + 创建时间索引CREATE TABLE orders ( id BIGINT AUTO_INCREMENT PRIMARY KEY, order_no VARCHAR(32) NOT NULL, user_id BIGINT NOT NULL, amount DECIMAL(10,2) NOT NULL, status TINYINT NOT NULL DEFAULT 0, created ...
MySQL大表DDL操作风险与在线变更实战
发表于2026-08-03|MySQL数据库|MySQL•DDL•在线变更•大表•生产实战
MySQL大表DDL操作风险与在线变更实战凌晨两点,DBA 小张被紧急告警吵醒:订单表orders的status字段需要从TINYINT扩展为INT,当他在 2 亿行的表上执行ALTER TABLE之后,业务连接池瞬间打满,所有订单操作全部阻塞,最终靠重启数据库并回滚当天数据才恢复。事故报告里写满了 “锁表”、“主从延迟 20 分钟”、“数据不一致” 的字眼。 这不是杜撰的故障,而是每天都在发生的现实。本文将从一个真实的压测场景开始,展示原生 DDL 的问题,然后深入pt-online-schema-change与gh-ost的原理,手把手带你完成三次完整的在线变更演练——每个例子都可以在你的机器上复现。 1. 原生 DDL 到底有多可怕?我们先在测试环境复现一次原生 DDL 带来的伤害。接下来的脚本会创建一张包含 500 万行数据的表,同时用 sysbench 模拟持续读写,然后执行ALTER TABLE ... ADD COLUMN,再观察阻塞时间和复制延迟。 1.1 环境准备1234567891011121314151617181920212223242526272829303 ...
MyBatis ResultMap 吞行问题
发表于2026-07-17|后端MyBatis|后端•MyBatis
MyBatis ResultMap 吞行问题 你写了一对多关联查询,数据库中明明有 10 行数据,MyBatis 返回的列表却只有 3 条。剩下的 7 行去哪了?这就是经典的 ResultMap “吞行”问题。 现象:数据去哪了?假设你有一张订单表 t_order 和一张订单明细表 t_order_item,一个订单可以包含多个商品明细: 123456789101112-- 订单CREATE TABLE t_order ( id BIGINT PRIMARY KEY, order_no VARCHAR(32));-- 订单明细CREATE TABLE t_order_item ( id BIGINT PRIMARY KEY, order_id BIGINT, product_name VARCHAR(64)); 你写了一个 SQL 用 JOIN 关联查询: 123456789<select id="getOrders" resultMap="OrderResultMap"> SELECT ...
埃隆马斯克 - 放眼未来 无所畏惧
发表于2025-01-31|读书笔记
埃隆马斯克 - 放眼未来 无所畏惧
doris物化视图
发表于2025-01-05|数据架构|数据架构
Doris物化视图Apache Doris 物化视图详解1. 概述物化视图是一种预计算和储存数据的机制,它通过将复杂查询预算结果以视图的形式保存,以提高进一步查询的性能。对于大数据分析场景,物化视图可以最大稍少进一步计算,为 BI 分析和报表运行提供支持。 Apache Doris 作为一个面向分布式数据库分析的 MPP 架构,支持为大规模数据进行实时分析和回馈。物化视图是它的一个重要特性,可用于提升查询性能。 2. Doris 中物化视图的特点 自动选择符合的物化视图:在执行查询时,Doris 会根据查询的 SQL 自动匹配适合的物化视图,无需手动指定。 增量更新与数据不一致性操作:物化视图通过增量更新保证高效性和实时性。 支持复杂查询的预算:对于带有积分和聚合操作的复杂查询,物化视图可以显著提高性能。 更简单的管理方式:通过一套简单的命令,创建和维护物化视图,构造操作涉及深。 3. 创建物化视图在 Doris 中,创建物化视图的基本语法如下: 12345CREATE MATERIALIZED VIEW mv_nameASSELECT <column_list>FROM ...
Closeable接口
发表于2025-01-02|后端Java|后端•Java
Closeable通常来说,Closeable接口的使用需要配合 try with resource,关闭时自动执行Closeable接口定义的 close 方法 如果没有实现这个接口,就无法使用 try with resource,且需要手动关闭资源
永不放弃——特朗普自述 NEVER GIVE UP
发表于2024-12-20|读书笔记|读书笔记
永不放弃——特朗普自述【笔记整理】 关注解决之道,而不要抱怨出现的问题。 你的生意做的越大,你的人生境界越高,那么你遭遇的困难也会越有挑战性。如果你有这样的思想准备,那么在遇到困难时自己的情绪波动就不会太大,也不会无谓地烦恼甚至积郁成疾。 如果你觉得一个人在苦苦打拼,那么你可以用这种积极的精神力量来鼓励自己,内在的信念往往是人们分出伯仲高下的隐性分水岭。失败者往往都会选择放弃。 如果你遇到需要让你投入更多时间的情形,你不妨尝试一下,让自己渐入佳境。你最后都会为自己每天的成就而感到惊讶。 有的时候,如果你把所有可能出现的问题都考虑到了之后,你就不妨可以去想象可能会出现什么好事了。 勇气意味着绝不放弃。背弃理想很容易,失败者往往就是缩手缩脚的。被打倒是一回事,而自暴自弃则是另一回事。一些看似平凡的人之所以能够创下丰功伟业,正是因为他们的百折不挠和永不放弃的精神。 海明威说过一句名言:“勇气就是优雅地面对压力。” 勇气还有另一个好处,那就是能够帮助你用正确的思维来考虑问题和做出行动,它会让你关注面前的机遇,而非障碍。其实,很多问题换个角度去考虑就是机遇,只不过它的表现形式让我们 ...
SQL必知必会-读书笔记(十三)
发表于2024-12-16|读书笔记|读书笔记
SQL必知必会-读书笔记(十三)存储过程是什么存储过程(Stored Procedure) 是一组预编译的SQL语句,它们被存储在数据库中,可以像函数一样被调用。存储过程可以接受输入参数、输出参数,并且可以包含控制流语句(如条件判断、循环等)。存储过程的主要目的是提高数据库操作的效率和安全性,减少网络流量,并且可以封装复杂的业务逻辑。 优点 提高性能:存储过程在创建时会被编译并存储在数据库中,执行时不需要再次编译,提高了执行效率。 减少网络流量:客户端只需要发送存储过程的调用请求,而不需要发送大量的SQL语句,减少了网络传输的数据量。 封装业务逻辑:存储过程可以封装复杂的业务逻辑,使应用程序代码更加简洁。 提高安全性:通过授予用户对存储过程的执行权限,可以限制用户直接访问底层表,提高数据的安全性。 虽然实践中基本用不到存储过程,但是可以作为了解的一环 如何创建基本语法 123456789DELIMITER //CREATE PROCEDURE procedure_name (IN param1 datatype, OUT param2 datatype)BEGIN -- S ...
12…11
avatar
TranquilXuan
潜龙勿用,或跃在渊
文章
105
标签
28
分类
24
分类
  • MySQL1
    • 数据库1
  • 博客搭建5
  • 后端67
    • Java12
    • MyBatis5
    • Spring21
    • 中间件7
    • 工具库2
    • 性能优化1
    • 数据处理3
    • 数据库15
    • 软件工程1
  • 工程实践4
    • DevOps3
    • 博客搭建1
  • 数据库1
    • 后端1
  • 数据架构1
  • 认知思考4
  • 读书笔记15
  • 软件工程7
    • UML1
    • 设计模式6
标签
数据库 工具库 软件工程 认知思考 DevOps Deadlock 后端 性能调优 读书笔记 窗口函数 数据架构 性能优化 中间件 MySQL DDL 数据处理 Java 在线变更 博客搭建 Elasticsearch MyBatis 生产实战 大表 设计模式 实战 Spring UML 工程实践
归档
  • 八月 20264
  • 七月 20261
  • 一月 20253
  • 十二月 20245
  • 十一月 20241
  • 九月 202424
  • 八月 20245
  • 七月 202462
网站资讯
文章数目 :
105
已运行时间 :
本站总字数 :
10.2w
本站总访问量 :
最后更新时间 :
©2024 - 2026 By TranquilXuan
京ICP备2026046208号-1
搜索
数据库加载中