在 MySQL 优化中,“小表驱动大表”是一条广为人知的核心原则——尤其在多表 Join 场景下,驱动表的选择直接影响查询性能,甚至可能导致“毫秒级”与“秒级”的差距。但很多开发者只知其然,不知其所以然:为什么小表驱动大表更快?没有索引时还成立吗?多表 Join 如何选择驱动表? 一、先明确概念:什么是“驱动表”与“被 […]
在 MySQL 优化中,“小表驱动大表”是一条广为人知的核心原则——尤其在多表 Join 场景下,驱动表的选择直接影响查询性能,甚至可能导致“毫秒级”与“秒级”的差距。但很多开发者只知其然,不知其所以然:为什么小表驱动大表更快?没有索引时还成立吗?多表 Join 如何选择驱动表? 一、先明确概念:什么是“驱动表”与“被 […]
在高并发系统中,缓存是提升性能的核心手段,但单一缓存往往难以平衡“速度、容量、一致性”三者的需求。基于 Spring Boot 生态的 Caffeine 本地缓存 + Redis 分布式缓存 + MySQL 数据库 三级缓存架构,已成为行业标配——它能将查询延迟从 MySQL 的百毫秒级,降至 Redis 的毫秒级、C […]
在分布式架构中,MySQL 与 Elasticsearch(ES)的组合早已成为“事务存储+高效检索”的黄金搭档——MySQL 凭借 ACID 特性保障核心数据一致性,ES 则以倒排索引和分布式架构支撑百万级数据的全文检索、聚合分析。但二者的协同核心,始终绕不开“数据同步”这一关键环节:如何在保证数据一致性的前提下,兼 […]
在开发圈,Docker 早已成为“快速部署”的代名词——一行命令启动 Redis、Nginx,甚至整个微服务集群,这种便捷性让很多开发者习惯性地将 MySQL 也塞进容器。尤其是在开发测试环境,用 docker run 或 docker-compose 搭个数据库确实高效,但一旦推向生产环境,各种隐藏问题就会逐渐暴露: […]
在高性能场景(如高并发读写、复杂查询、大数据量存储、多维度数据处理等)中,PostgreSQL 常被优先推荐,核心原因在于其更优的并发控制、更强的查询优化能力、更灵活的扩展性、更丰富的高性能特性——这些优势恰好匹配高性能场景对“吞吐量、低延迟、稳定性、功能灵活性”的核心需求。以下从 6 个关键维度,结合 Postgre […]
mybatis-plus-join-boot-starter是MyBatis - Plus的一个增强工具包,用于简化开发。 功能特点 简化多表操作:它是MyBatis - Plus的扩展,让开发者能更便捷地进行多表关联查询、子查询等操作,通过简洁的API满足复杂查询需求。例如,在进行多表联合查询时,无需编写大量复杂的S […]
在 MySQL 数据库的日常运维过程中,二进制文件的管理是一个重要环节。合理清理 MySQL 二进制文件不仅能够优化数据库性能,还能有效节省磁盘空间。今天,我们就来深入探讨一下 MySQL 二进制文件清理的相关知识。 一、MySQL 二进制文件是什么? MySQL 二进制文件主要包括二进制日志(binary log)和 […]
1. 引言 存储过程和存储函数类似于面向对象程序设计语言中的方法,可以简化代码,提高代码的重用性。本文主要介绍如何创建存储过程和存储函数,以及存储过程与函数的使用、修改、删除等操作。 2. 存储过程与存储函数 MySQL中提供存储过程与存储函数机制,我们姑且将存储过程和存储函数合称为存储程序。与一般的SQL语句需要先编 […]
结论 先说大致的结论(完整结论在文末) 在语义相同,有索引的情况下:group by和distinct都能使用索引,效率相同。 在语义相同,无索引的情况下:distinct效率高于group by。原因是distinct 和 group by都会进行分组操作,但group by可能会进行排序,触发filesort,导致 […]
背景 mysql分页查询是我们常见的需求,但是随着页数的增加查询性能会逐渐下降,尤其是到深度分页的情况。我们可以把分页分为两个步骤: 定位偏移量 获取分页条数的数据 所以当数据较大页数较深时就涉及一次需要耗费较长时间的操作。所以mysql深度分页的问题该如何解决呢? 首先我们来看一个简单的查询: SELECT * FR […]
如果你想破解一个已经连接好的数据库密码,可以参考这个方法。 邮件查看已经连接好的数据库属性是这样的 但是密码是******谁也看不懂,博主也从网站上下载过一些星星查看器之类的东西,都无济于事。 接下来就是尝试导出这些连接属性,选择文件---->导出连接,勾选想要导出的数据库,导出.ncx后缀的文件 打开导出后的文 […]
数据库事务的隔离级别有4种,由低到高分别是:Read uncommitted、Read committed、Repeatable read、Serializable。事物的并发操作中可能出现脏读,不可重复读,幻读。 数据库事务隔离级别: 未授权读取级别(读未提交): 也称为读未提交(Read Uncommitted)。 […]
背景 MySQL版本:5.7.18 问题 假设字段category无索引且有重复值,order by category 和limit组合使用的结果会和预期不符。 场景复现 表结构(复现问题,两个字段足够了~) CREATE TABLE `ratings` ( `id` int(11) NOT NULL AUTO_INC […]
本文主要总结下重做日志(redo log)、回滚日志(undo log)、二进制日志(binlog)的概念。 redo log 是物理日志,undo log 和 binlog 是逻辑日志 binlog二进制日志是server层的无论MySQL用什么引擎,都会有的,主要是左主从复制,时间点恢复使用 redo log重做日 […]
有一个奇怪的问题,假如MySQL 的自增 ID 用完了,怎么办? 这个知识点比较冷门,不过可以自己手动实践下。 首先,创建一个最简单的表,只包含一个自增id,并插入一条数据。 create table t0(id int unsigned auto_increment primary key) ; insert int […]
封侯非我意,但愿海波平。